webBasic

This 키워드와 바인딩

this는 함수의 출생지가 아니라 호출 위치를 기준으로 결정된다. 예외적으로 화살표 함수는 상위 범위의 this를 그대로 사용한다.

호출 위치별 결정 규칙

call-site first

기본 호출

독립 함수처럼 부르면 엄격 모드에서는 undefined, 그 외에는 전역 객체가 된다.

메서드 호출

객체.함수 형태로 부르면 점 왼쪽 객체가 this가 된다.

생성자 호출

new와 함께 실행하면 새 인스턴스가 만들어지고 그 객체가 this가 된다.

명시적 바인딩

call과 apply는 즉시 실행하며 this를 지정하고, bind는 고정된 새 함수를 돌려준다.

화살표 함수의 차이

lexical this

화살표 함수는 자기만의 this를 만들지 않는다. 메서드 안 콜백에서 바깥 this를 유지하고 싶을 때 유용하지만, 객체 메서드 자체를 화살표로 만들면 기대한 객체를 가리키지 않을 수 있다.

이벤트와 콜백 실수

lost receiver

메서드를 변수에 담거나 이벤트 콜백으로 넘기면 호출 객체가 사라질 수 있다. 이때 bind로 this를 고정하거나, 바깥 this가 필요한 콜백은 화살표 함수로 작성한다.

check point

this가 이상하면 함수 정의가 아니라 호출한 위치, 점 왼쪽 객체, new와 bind 적용 여부, 화살표 함수 여부를 순서대로 확인한다.