call, bind, apply 차이점

call, bind, apply 차이점

자바스크립트에서 this란?

함수, 메서드, 생성자를 호출하는 주체이고 호출하는 방식에 따라 결정된다.
 
기본적으로는 this는 전역객체를 가르킨다.
💡
node환경에서 this는 global 객체 브라우저 환경에서 this는 window 객체
 
  1. 함수 호출
    1. 전역함수, 내부함수, 콜백함수는 모두 this가 기본적으로 전역으로 바인되어있다.
      ※ 엄격모드(strict)에서는 this가 null 또는 undefind일때 전역객체로 자동 바인딩 하지않는다.
  1. 매서드 호출
    1. 매서드의 this는 매서드를 소유한객체, 호출한 객체에 바인딩된다.
  1. 생성자 호출
    1. new 키워드로 생성시, this는 새로 생성된 인스턴스를 가르킨다. 생성자의 프로퍼티가 가르키는 객체를 자신의 프로토타입 객체로 설정한다. new키워드가 없을때는 생성자 함수가 아니라 일반 함수로 실행되기 때문에 이때 this는 기본적으로 this를 가르키게 된다.
 

명시적 바인딩

this에 바인딩 될 객체는 함수호출 방법에 의해서 결정된다. 이를 명시적으로 this를 바인딩해주기 위해 apply, call, bind와 같은 메서드가 사용된다.

apply

  1. 함수를 실행시킨다.
  1. 첫 번째로 함수의 this로 명시할 인자가 들어간다.
  1. 두 번째는 실행시킬 함수에 인자로 배열을 넘겨준다.

call

  1. 함수를 실행시킨다.
  1. 첫 번째로 함수의 this로 명시할 인자가 들어간다.
  1. 두 번째 이후로는 실행시킬 함수에 인자로 여러개를 넣어줄 수 잇다.
 

bind

  1. 함수를 실행시키지 않는다.
  1. this가 바인딩된 새로운 함수를 리턴
 

 
참고