this 바인딩 결정 맵
this는 함수가 어디서 선언됐는지보다 어떻게 호출됐는지에 따라 달라진다. 예외는 화살표 함수다.
| 호출 형태 | this 값 | 예시 | 주의점 |
|---|---|---|---|
| new call | 새로 만들어진 인스턴스 | new User() | 생성자 반환값과 prototype 확인 |
| explicit call | call/apply/bind로 지정한 값 | fn.call(obj) | bind는 새 함수를 만든다 |
| method call | 점 왼쪽 객체 | obj.fn() | 분리 대입하면 객체 연결이 끊김 |
| plain call | strict 모드에서는 undefined | fn() | 전역 객체 기대 금지 |
| arrow function | 바깥 lexical this | () => this.x | 메서드 this가 필요하면 부적합 |
this 문제는 함수 위치보다 호출 표현식을 먼저 보면 대부분 결정된다.