- 어떠한 object를 가리키는 키워드
- JS에서 this는 일반적인 프로그래밍 언어의 this와 조금 다르게 동작
- java의 this와 python의 self는 인스턴스 자기 자신을 가리키는 반면, JS에서는 해당 함수의 호출 방식에 따라 this에 바인딩 되는 객체가 달라짐
전역 문맥에서의 this
함수 문맥에서의 this
1. 단순 호출
- 전역 객체를 가리킴
- 전역은 브라우저에서 window, Node.js는 global을 의미
const myFunc = function() {
console.log(this);
}
// 브라우저
myFunc(); // window
// Node.js
myFunc(); // global
2. method
- 메서드로 선언하고 호출한다면, 객체의 메서드이므로 해당 객체가 바인딩
const myObj = {
data: 1,
myFunc() {
console.log(this); // myObj
console.log(this.data); // 1
};
};
myObj.myFunc(); // myObj
3. nested
- forEach의 콜백 함수에서의 this가 메서드의 객체를 가리키지 못하고 전역 객체 window를 가리킴 ⇒ 단순 호출 방식으로 사용되었기 때문
- 화살표 함수를 사용하면 해결 가능
- 화살표 함수에서 this는 자신을 감싼 정적 범위를 가리킴 ⇒ 한 단계 상위 scope의 context를 바인딩함
- 따라서, 함수 내의 함수인 경우 화살표 함수를 쓰는 것을 권장