[javascript] this 바인딩과 실행 컨텍스트 동작은 어떻게 달라지는가?
JavaScript에서 this
바인딩과 실행 컨텍스트는 코드 내에서 함수가 실행될 때 동작하는 방식에서 차이가 있습니다. 이 둘을 이해하는 것이 JavaScript를 깊이 있게 이해하는 핵심 요소 중 하나입니다.
실행 컨텍스트
JavaScript 엔진은 코드를 실행할 때 실행 컨텍스트를 만들어 실행 환경을 설정합니다. 실행 컨텍스트는 함수가 호출될 때 생성되며, 함수의 실행이 끝나면 제거됩니다. 실행 컨텍스트에는 해당 함수의 호출, 변수, 매개 변수, this
값 및 스코프 정보가 저장됩니다.
this
바인딩
this
는 실행 중인 함수의 소유자 객체를 가리킵니다. 그러나 어떤 함수의 this
가 될지는 실행 컨텍스트에 따라 달라집니다.
전역 실행 컨텍스트에서의 this
전역 실행 컨텍스트에서 this
는 전역 객체를 가리킵니다. 브라우저 환경에서는 window
객체이고, Node.js 환경에서는 global
객체입니다.
함수 실행 컨텍스트에서의 this
함수 안에서 this
는 함수를 호출할 때 해당 함수를 소유하고 있는 객체를 가리킵니다. 그러나 화살표 함수(=>
)의 경우, this
는 함수가 정의된 곳의 렉시컬 스코프를 가리킵니다.
결론
this
바인딩은 실행 컨텍스트에 따라 달라지며, 함수가 어떻게 호출되느냐에 따라 this
가 동적으로 바인딩됩니다. 이를 이해하면 JavaScript에서 this
의 동작을 더 잘 이해할 수 있습니다.
// 전역 실행 컨텍스트에서의 this
console.log(this); // window or global object
// 함수 실행 컨텍스트에서의 this
const obj = {
func() {
console.log(this);
}
}
obj.func(); // obj
// 화살표 함수에서의 this
const arrowFunc = () => {
console.log(this);
}
arrowFunc(); // window or global object