함수 호출 방식에 의해 결정되는
this
에 대해 알아보자.
함수의 상위 스코프를 결정하는 방식인 렉시컬 스코프(Lexical scope)는 함수를 선언할 때 결정된다.
this 바인딩과 혼동하지 않도록 하자.
그리고 Java의 this와는 차이가 있으니 명심하자.
: this는 객체와 연관이 깊다.
var myName = {name: "ash"}
this.name
을 호출하면 "ash"
가 출력되다.콘텍스트(context)객체
라고 한다.this가 바라보는 객체?
정도로 해석하자.const goat = {
dietType: 'herbivore',
makeSound() {
console.log('baaa');
},
diet() {
console.log(this.dietType);
}
};
goat.diet();
// Output: herbivore
객체goat
를 통해 함수diet
는 호출되었으므로 goat가 this가 되는 것이다.function test() {
console.log(this);
}
var obj = { name: "ash" };
test.call(obj); // { name: 'ash' }
: this를 화살표 함수에서 사용할 경우 조금 복잡해진다.
const goat = {
dietType: 'herbivore',
makeSound() {
console.log('baaa');
},
diet: () => {
console.log(this.dietType);
}
};
goat.diet(); // Prints undefined
호출한 객체
가 아닌 글로벌 스코프
의 범위에 묶인다.