Javascript - this

이재현·2021년 6월 16일
0

this

Javascript에서 This는 실행 컨텍스트(공부할것)이 생성될 때 함께 결정된다고 합니다.

즉, 함수를 호출할 때에도 This가 결정됩니다.(라고 할 수 있을 것 같습니다)

전역공간에서 this는 전역객체를 가리킵니다.
->브라우저 환경에서 this는 window를 가리킵니다.

함수 vs 메서드 + this??

메서드

메서드로서의 호출은 자신을 포함한 객체가 명시되기 때문에, 이 때 this는 메서드를 포함한 객체를 직접 가리키게 됩니다.

obj.method()의 경우 this는 obj가 됩니다.

함수

함수로서의 호출은 개발자가 직접 호출에 관여한 것이기에, 호출주체를 알 수 없습니다. this는 지정되지 않은 경우, 기본적으로 this는 전역객체를 가리키기 때문에, 함수에서의 this는 전역객체를 가리키게 됩니다.

call, apply, bind 메서드

.call

call 메서드를 사용하면 임의의 객체를 this에 지정할 수 있습니다.
ex) var func =function(a,b) {
console.log(this,a,b);
};

func.call({x:1},4,5}; // result -> {x:1} 4 5

call 메서드를 사용했기 때문에 this가 {x:1}이라는 객체가 된 것

.apply

apply 메서드는 call 메서드와 유사하지만 두번째 인자를 배열로 받는 차이가 있습니다.

func.apply({x:1},[4,5]}; // result -> {x:1} 4 5 (? 테스트필요)

.bind

bind 메서드는 call과 비슷하지만 함수를 즉시 호출하지 않고, 넘겨받은 this와 인수들을 바탕으로 새로운 함수를 반환하는 메서드입니다.

bind 메서드의 효과?

  1. 함수에 this를 미리 지정해 줄 수 있다.
  2. 부분적으로 미리 적용이 되어있는 부분적용함수(?)를 구현할 수 있음
profile
항상 생각하는 개발자

0개의 댓글