JavaScript에서
this
는 매우 중요한 개념이다. 그렇지만 이해하기 어려운 부분 중 하나로 여겨진다.this
는 실행 컨텍스트에 따라 달라지며, 함수가 호출되는 방식에 따라 참조하는 객체가 달라진다. 이 포스트에서는this
와 관련된 바인딩에 대해 알아보겠다.
this
키워드는 현재 실행 컨텍스트에서 특별한 객체를 참조한다. 일반적으로, 함수 내에서 this
는 함수 호출에 의해 결정된다.
this
는 전역 객체를 참조한다.this
는 해당 객체를 참조한다.this
는 새로 생성된 객체를 참조한다.strict mode
에서 this
는 undefined가 될 수 있다.예시:
function globalContext() {
console.log(this); // 전역 객체 (브라우저에서는 window)
}
var obj = {
methodContext: function() {
console.log(this); // obj
},
};
globalContext();
obj.methodContext();
바인딩은
this
가 특정 객체에 연결되도록 하는 과정이다. JavaScript에서는 여러 방법으로this
의 바인딩을 변경할 수 있다.
명시적 바인딩: call
, apply
, bind
메서드를 사용해 this
를 명시적으로 바인딩할 수 있다.
예시:
function showName() {
console.log(this.name);
}
var person = { name: '홍길동' };
showName.call(person); // '홍길동'
암시적 바인딩: 객체의 메서드로 호출되는 함수에서 this
는 해당 객체로 암시적으로 바인딩된다.
예시:
var person = {
name: '이순신',
sayName: function() {
console.log(this.name);
},
};
person.sayName(); // '이순신'
new 바인딩: new
키워드를 사용해 생성자 함수를 호출하면 this
는 새로 생성된 객체를 참조한다.
예시:
function Person(name) {
this.name = name;
}
var person = new Person('세종');
console.log(person.name); // '세종'
화살표 함수: 화살표 함수에서의 this
는 상위 스코프의 this
를 물려받는다.
예시:
var obj = {
name: '유관순',
sayName: () => {
console.log(this.name);
},
};
obj.sayName(); // undefined (화살표 함수에서 this가 상위 스코프의 this를 참조)
this
는 JavaScript에서 복잡한 개념 중 하나로, 함수가 호출되는 방식에 따라 다르게 작동한다. 바인딩을 이해하면 이러한 복잡성을 제어하고 코드를 더 효과적으로 작성할 수 있다.