핵심 답변
JavaScript에서 this는 함수가 어떻게 호출되었느냐에 따라 동적으로 결정됩니다.
일반 함수 호출: 전역 객체(window / global), strict mode에서는 undefined
메서드 호출: 호출한 객체
화살표 함수: 상위 스코프의 this (렉시컬 바인딩)
생성자 함수 호출: 새로 생성된 인스턴스
call / apply / bind: 첫 번째 인수로 명시된 객체
예시 코드
javascript
const obj = {
name: '홍길동',
greet() {
console.log(this.name); // '홍길동' (메서드 호출)
},
greetArrow: () => {
console.log(this.name); // undefined (화살표 함수)
},
};
function Person(name) {
this.name = name; // 생성자 함수: this = 새 인스턴스
}핵심 용어
📌 렉시컬 바인딩(Lexical Binding)화살표 함수에서 this는 선언된 위치의 상위 스코프 this를 그대로 사용합니다. 호출 방식에 영향받지 않습니다.
📌 명시적 바인딩(Explicit Binding)call(), apply(), bind()를 사용해 this를 직접 지정하는 방법입니다. bind()는 새로운 함수를 반환하며, call/apply는 즉시 호출합니다.