this 바인딩 판별 순서
this는 함수가 어디에 작성됐는지보다 어떻게 호출됐는지에 따라 달라지는 경우가 많고, 화살표 함수는 주변 this를 따른다.
| 우선순위 | 질문 | 결정 결과 | 예외/주의 |
|---|---|---|---|
| 1 | new로 호출했는가 | 새 인스턴스가 this | 화살표 함수는 생성자 불가 |
| 2 | call/apply/bind를 썼는가 | 명시한 객체가 this | bind가 가장 강하게 고정 |
| 3 | obj.method() 형태인가 | 점 왼쪽 객체가 this | 메서드를 변수에 담으면 plain call |
| 4 | 그냥 함수 호출인가 | undefined 또는 전역 객체 | strict mode 확인 |
| 0 | 화살표 함수인가 | 바깥 lexical this | 위 규칙을 따르지 않음 |
this 디버깅은 호출 표현식을 우선순위대로 읽고, 화살표 함수 여부를 먼저 제외하면 빠르다.