this binding

this는 선언 위치보다 호출 방식으로 결정된다

메서드로 호출했는지, 일반 함수로 분리했는지, new나 bind를 사용했는지가 this 값을 바꾸는 핵심 기준입니다.

Global call

Global call

일반 함수 호출은 전역 객체 또는 strict mode의 undefined로 이어질 수 있습니다.

Method call

Method call

점 앞의 객체가 메서드 내부 this가 됩니다.

Constructor

Constructor

new로 호출하면 새 인스턴스가 this로 바인딩됩니다.

Arrow

Arrow

화살표 함수는 자체 this를 만들지 않고 바깥 this를 그대로 씁니다.

메서드 분리 const fn = user.greet 후 fn()으로 부르면 user가 this가 아닙니다.
명시 고정 call, apply, bind는 thisArg를 직접 지정해야 할 때 사용합니다.
콜백 선택 외부 메서드의 this를 유지해야 하면 화살표 함수가 유리합니다.

this를 예측하려면 함수가 어디에 적혔는지보다 호출 순간의 왼쪽 객체와 바인딩 도구를 봐야 합니다.