728x90
this는 현재 실행 컨텍스트에서의 객체 참조를 나타냅니다. 즉, 함수가 호출될 때 결정되는 객체를 가리키며, 함수가 어떻게 호출되었는지에 따라 'this'의 값이 달라집니다.
1. 전역 컨텍스트에서의 this
전역 영역에서의 'this'는 브라우저 환경에서는 window 객체를, Node.js 환경에서는 global 객체를 참조합니다.
console.log(this); // window 객체를 출력
2. 함수 호출에서의 this
일반 함수에서 'this'는 기본적으로 전역 객체를 가리킵니다. 하지만 **엄격 모드(strict mode)**에서는 undefined가 됩니다.
function showThis() {
console.log(this);
}
showThis(); // window 객체를 출력 (엄격 모드에서는 undefined)
3. 메서드 호출에서의 this
객체의 메서드로 함수를 호출할 경우, 'this'는 해당 객체를 참조합니다.
const obj = {
name: 'Alice',
getName: function() {
console.log(this.name);
}
};
obj.getName(); // 'Alice'를 출력
4. 생성자 함수에서의 this
생성자 함수에서 'this'는 새로 생성되는 인스턴스를 가리킵니다.
function Person(name) {
this.name = name;
}
const person = new Person('Bob');
console.log(person.name); // 'Bob'을 출력
5. call, apply, bind를 통한 this 제어
함수의 메서드인 call, apply, bind를 사용하면 'this'를 명시적으로 지정할 수 있습니다.
function greet() {
console.log(this.name);
}
const user = { name: 'Carol' };
greet.call(user); // 'Carol'을 출력
6. 화살표 함수에서의 this
화살표 함수는 자신만의 'this'를 가지지 않고, **상위 스코프의 'this'**를 그대로 사용합니다.
const obj = {
name: 'Dave',
getName: function() {
const innerFunc = () => {
console.log(this.name);
};
innerFunc();
}
};
obj.getName(); // 'Dave'를 출력
7. 이벤트 핸들러에서의 this
DOM 이벤트 핸들러에서 'this'는 이벤트가 바인딩된 요소를 가리킵니다.
<button id="myButton">Click me</button>
document.getElementById('myButton').addEventListener('click', function() {
console.log(this.id); // 'myButton'을 출력
});
정리
- 함수 호출 방식에 따라 'this'의 값이 결정됩니다.
- 전역 컨텍스트: 브라우저에서는 window, Node.js에서는 global.
- 일반 함수 호출: 기본적으로 전역 객체를 참조하나, 엄격 모드에서는 undefined.
- 메서드 호출: 해당 객체를 참조.
- 생성자 함수 호출: 새로 생성된 인스턴스를 참조.
- call, apply, bind: this를 명시적으로 설정 가능.
- 화살표 함수: 상위 스코프의 'this'를 사용.
- 이벤트 핸들러: 이벤트가 바인딩된 요소를 참조.
'Web > Frontend 기본 CS 정리' 카테고리의 다른 글
클로져(Closure)에 대해 설명해주세요. (0) | 2024.12.24 |
---|---|
깊은 복사와 얕은 복사에 대해 설명해주세요. (0) | 2024.12.06 |
호이스팅에 대해 설명해주세요 (0) | 2024.12.06 |
var, let, const 차이를 설명해주세요 (0) | 2024.12.06 |
async, await 사용방법을 설명해주세요. (0) | 2024.12.06 |