기본적으로 this는 전역 객체를 가리킴
브라우저에서 console.log(this)를 찍어보면 Window 객체를 가리킨다.
nodejs나 함수, strict 모드에서는 this가 다른 것을 가리킨다.
바인딩: this를 고정시키는 방법
this가 어디 안에 있는지에 따라 자주 변해서 바인딩으로 this를 고정할 수 있다.
function foo() {
const a = 10;
console.log(this.a);
}
foo(); // 결과: 10이 아닌 undefined
이때 this는 전역 객체를 가리켜서 여기에는 a가 없으므로 undefined를 출력한다.
window.a = 10;
function foo() {
console.log(this.a);
}
foo(); // 10
이렇게 window.a라고 먼저 선언한 뒤 this를 가리키면 정상적으로 10이 출력된다.
이때 'use strict'를 앞에 붙일 경우 엄격모드로 바인딩하게 되어 전역객체는 제외된다.
그 외 바인딩 방법: 명시적,암시적,new 바인딩
cf) new 바인딩
function Foo() {
this.a = 10;
}
const foo = new Foo();
console.log(foo.a); // 10
new 바인딩의 경우 문법이 java 공부했던 것과 똑같다.