자바스크립트에서 실질적으로 함수와 객체(메서드)를 구분하는 유일한 기능을 함
this는 실행컨텍스트가 생성될 때 함께 결정됨
실행컨텍스트는 함수를 호출할때 생성됨
즉, this는 함수를 호출할 때 결정됨
전역공간에서 this는 전역객체를 가리킴
메서드로 호출하는 경우 호출 주체는 바로 함수명(프로퍼티명) 앞의 객체
점 표기법의 경우 마지막 점 앞에 명시된 객체가 바로 this가 됨
const obj = {
methodA: function () {console.log(this); },
inner: {
methodB: function () {console.log(this); }
}
};
obj.methodA() // {methodA: f, inner: {...}} (===obj)
obj['methodA'](); // {methodA: f, inner: {...}} (===obj)
obj.inner.methodB() // {methodB: f} (===obj.inner)
점(.)없이 함수로 호출한 경우
this = 전역객체를 가리킴
this를 바인딩하지 않으므로 상위스코프의 this를 그대로 활용할 수 있음