Study/JavaScript

[JS] call & apply & bind

taecongs 2023. 10. 5. 17:38

알고있으면 좋은 Javascript Tip✨


함수에서 사용되는 this는?

  • 보통 어떤 함수를 함수로서 호출한 경우 this는 전역객체를 참조한다.
  • 실행해보면 전역객체인 window 객체가 출력된다.
  • 전역객체가 아닌 다른 객체를 출력하고 싶은 경우 call, apply, bind를 사용한다.
function test(){
  console.log(this);
};

test();

 

(1) call

  • call 메서드는 메서드의 호출 주체인 함수를 즉시 실행하는 메서드이다.
  • 전역객체가 아닌 바인딩 시켜준 객체가 출력된다.
function test(c, d){

  // {a : 1, b : 2} 3 4
  console.log(this, c, d);
};

test.call({a : 1, b : 2}, 3, 4);

 

(2) apply

  • call 메서드와 동일하게 메서드의 호출 주체인 함수를 즉시 실행하는 메서드이다.
  • 차이점은 첫번째 인자 이후의 인자들을 배열로 받는다.
function test(c, d){

  // {a : 1, b : 2} 3 4
  console.log(this, c, d);
};

test.apply({a : 1, b : 2}, [3, 4]);

 

(3) bind

  • bind 메서드는 함수를 즉시 실행하지 않고 넘겨 받은 인수를 바탕으로 새로운 함수를 반환하는 메서드이다.
function test(c, d){

  // {a : 1, b : 2} 3 4
  console.log(this, c, d);
};

const newTest = test.bind({a : 1, b : 2}, 3, 4);
newTest();

 

⭐개념정리⭐

  • call, apply, bind 메서드 모두 명시적으로 this를 바인딩 할 때 사용한다.
  • call 메서드와 apply 메서드는 메서드의 호출 주체인 함수를 즉시 실행한다.
  • apply 메서드는 첫번째 인자 이후의 인자들을 배열로 받는다.
  • bind 메서드는 call 메서드와 apply 메서드와는 다르게 함수를 즉시 실행하지 않고 새로운 함수를 반환한다.

'Study > JavaScript' 카테고리의 다른 글

[JS] padStart & padEnd  (0) 2023.10.17
[JS] reduce  (0) 2023.10.17
[JS] Set  (0) 2023.09.14
[JS] 이벤트 루프  (0) 2023.09.07
[JS] this  (0) 2023.09.07