2. this 키워드 이해하기
this 키워드란 무엇인가?
this
키워드는 JavaScript에서 함수가 호출될 때 설정되는 특수한 객체를 참조합니다. this
의 값은 함수가 어떻게 호출되었는지에 따라 결정됩니다.
기본적인 this의 사용
1. 전역 컨텍스트에서의 this
전역 컨텍스트에서 this
는 전역 객체를 참조합니다. 브라우저 환경에서는 window
객체를 가리킵니다.
console.log(this); // 출력: [object Window]
2. 객체 메서드에서의 this
객체의 메서드에서 this
는 그 메서드를 소유한 객체를 참조합니다.
let person = {
name: 'Alice',
greet: function() {
console.log('Hello, ' + this.name);
}
};
person.greet(); // 출력: Hello, Alice
함수에서의 this
1. 일반 함수에서의 this
일반 함수에서 this
는 전역 객체를 참조합니다. 엄격 모드(strict mode
)에서는 undefined
가 됩니다.
function showThis() {
console.log(this);
}
showThis(); // 출력: [object Window] (엄격 모드에서는 undefined)
2. 화살표 함수에서의 this
화살표 함수는 자신만의 this
바인딩을 가지지 않고, 외부 함수의 this
를 상속받습니다.
let person = {
name: 'Bob',
greet: function() {
let innerFunction = () => {
console.log('Hello, ' + this.name);
};
innerFunction();
}
};
person.greet(); // 출력: Hello, Bob
생성자 함수에서의 this
생성자 함수에서 this
는 새로 생성된 인스턴스를 참조합니다.
function Person(name) {
this.name = name;
}
let alice = new Person('Alice');
console.log(alice.name); // 출력: Alice
명시적으로 this 바인딩
1. call()
call
메서드를 사용하여 this
값을 명시적으로 설정할 수 있습니다.
function greet() {
console.log('Hello, ' + this.name);
}
let person = {
name: 'Charlie'
};
greet.call(person); // 출력: Hello, Charlie
2. apply()
apply
메서드는 call
과 비슷하지만, 인수를 배열로 전달합니다.
function greet(greeting, punctuation) {
console.log(greeting + ', ' + this.name + punctuation);
}
let person = {
name: 'Dave'
};
greet.apply(person, ['Hello', '!']); // 출력: Hello, Dave!
3. bind()
bind
메서드는 새로운 함수를 반환하며, this
값을 영구적으로 설정할 수 있습니다.
function greet() {
console.log('Hello, ' + this.name);
}
let person = {
name: 'Eve'
};
let boundGreet = greet.bind(person);
boundGreet(); // 출력: Hello, Eve
this의 사용 예제
1. 이벤트 핸들러에서의 this
DOM 이벤트 핸들러에서 this
는 이벤트가 발생한 요소를 참조합니다.
let button = document.getElementById('myButton');
button.addEventListener('click', function() {
console.log(this); // 출력: <button id="myButton">...</button>
});
결론
this
키워드는 JavaScript에서 매우 유용하지만, 혼란스러울 수 있는 개념입니다. this
의 값은 함수가 호출되는 방식에 따라 달라지므로, 이를 이해하고 적절히 사용하는 것이 중요합니다.
다음 글에서는 프로토타입과 상속에 대해 알아보겠습니다.
다음 글에서 만나요!
'JavaScript 심화 시리즈' 카테고리의 다른 글
[JavaScript 심화 시리즈] 6일차: JavaScript의 이벤트 루프와 비동기 처리 이해하기 (0) | 2024.08.06 |
---|---|
[JavaScript 심화 시리즈] 5일차: JavaScript 모듈과 패키지 관리 이해하기 (0) | 2024.08.05 |
[JavaScript 심화 시리즈] 4일차: JavaScript 비동기 프로그래밍: 콜백, 프로미스, async/await 이해하기 (0) | 2024.08.04 |
[JavaScript 심화 시리즈] 3일차: JavaScript의 프로토타입과 상속 이해하기 (0) | 2024.08.03 |
[JavaScript 심화 시리즈] 1일차: JavaScript 클로저와 스코프 체인 이해하기 (0) | 2024.08.01 |