call,apply와bind의 용법과 차이

2026 단어 전단javascript

먼저 세 가지 방법의 기본 문법을 살펴보자.


1. call 방법


역할: 호출 함수로 방법 내부의this지향을 수정하는 데 사용되며,this가 누구를 대표할 수 있는지 지정합니다 예를 들어 fn.call(obj) fn, this obj
call :
 .call( , 1, 2,...);
 : 
function test(a,b){
      console.log(this);
      console.log(a + b);
  }
  test(1,2);  //  window  3
  var obj = {name:'zjy'};
  window.test.call(obj,3,5);  //  {name:'zjy'} 8

해석:call 방법을 사용하지 않았을 때test 방법의this는 전역 대상인 window를 가리키고,call 방법을 사용한 후test의this는 window에서obj 대상으로 가리키며, 뒤의 매개 변수는 대응 방법의 참조 순서입니다.

2.apply 방법


역할:call 방법과 마찬가지로 수정 방법 내부의this가 가리키는 것이다. 이들의 차이점은 apply의 두 번째 파라미터는 반드시 하나의 그룹이어야 한다는 것이다(Iterator 인터페이스를 배치한 클래스 그룹의 대상도 가능하다).
// ?apply 
//  .apply( ,[ 1, 2,...]);
 : 
    function test(a,b){
        console.log(this);
        console.log(a + b);
    }
    test(1,2);  //  window  3
    var obj = {name:'zjy'};
    window.test.apply(obj,[3,5]);  //  {name:'zjy'} 8

해석: apply 방법을 사용하지 않았을 때test 방법의this는 전역 대상인 window를 가리키고, apply 방법을 사용한 후test의this는 window에서obj 대상으로 가리키며, 뒤의 수조 파라미터는 수조 중의 요소를 순차적으로test 방법이 참조된 위치에 대응한다.

3. bind 방법


역할:this의 지향 문제를 바꿉니다. 귀속 함수의this이며, 귀속된 새로운 함수인 varfb=fn을 되돌려줍니다.bind(obj); window.fb(); fb , this obj
// ?bind 
//  .bind( , 1, 2,...);
 :
  var obj = {key:"value"}
    var foo = function(){
        console.log(this)
    }
    foo.bind(obj)()  //  obj

해석:해석:bind 방법을 사용하지 않았을 때foo()의this는 전역 대상 window를 가리키고,bind 방법을 사용한 후는obj 대상을 가리킨다
역할: 앞의 두 가지는 모두this지향을 바꾸기 위해서입니다.bind는this지향을 바꾸고 이 방법을 복제하여 되돌려줍니다

총결산


apply,call,bind의 차이점:


1. 셋 다 함수의this 대상 지향을 바꿀 수 있다.
2. 셋의 첫 번째 파라미터는this가 가리키는 대상입니다. 이 파라미터나 파라미터가undefined나null이 없으면 기본적으로 전역 window를 가리킵니다.
3. 세 가지 모두 참조할 수 있지만 apply는 수조이고call은 매개 변수 목록이며 apply와call은 일회성 전송 매개 변수이며bind는 여러 번 전송으로 나눌 수 있다.
4.bind는 귀속this 이후의 함수로 잠시 후 호출하기 편리합니다.apply,call은 즉시 실행됩니다.
굵은 체

좋은 웹페이지 즐겨찾기