this 바인딩 결정 맵

this는 함수가 어디서 선언됐는지보다 어떻게 호출됐는지에 따라 달라진다. 예외는 화살표 함수다.

호출 형태this 값예시주의점
new call새로 만들어진 인스턴스new User()생성자 반환값과 prototype 확인
explicit callcall/apply/bind로 지정한 값fn.call(obj)bind는 새 함수를 만든다
method call점 왼쪽 객체obj.fn()분리 대입하면 객체 연결이 끊김
plain callstrict 모드에서는 undefinedfn()전역 객체 기대 금지
arrow function바깥 lexical this() => this.x메서드 this가 필요하면 부적합

this 문제는 함수 위치보다 호출 표현식을 먼저 보면 대부분 결정된다.