
this가 가리키는 대상이 계속해서 바뀌는 것 때문에 큰 혼란을 겪습니다.
어떤 때는 객체를, 어떤 때는 전역 객체를, 또 어떤 때는 undefined를 가리키기도 합니다.this는 함수가 선언된 위치가 아니라, 함수가 this가 결정되는 4가지 명확한 규칙과, 이 모든 규칙을 무시하는 특별한 경우까지 함께 탐구해 보겠습니다.this 바인딩의 4가지 규칙 🔗this는 아래 4가지 규칙 중 하나를 따르게 됩니다.'use strict')가 아닐 때: this는 전역 객체를 가리킵니다.
(브라우저에서는 window, Node.js에서는 global)this는 undefined가 됩니다.
전역 객체를 오염시키는 것을 막기 위한 안전장치입니다.function sayHello() {
console.log(this);
}
sayHello(); // 브라우저 비엄격 모드에서는 window 객체 출력객체.메서드() 형태로 호출하면, this는 바로 그 const person = {
name: '홍길동',
greet: function() {
console.log('안녕하세요, 저는 ' + this.name + '입니다.');
}
};
person.greet(); // '안녕하세요, 저는 홍길동입니다.' 출력 (this는 person 객체)this가 무엇을 가리킬지 call(), apply(), bind() 라는 세 가지 메서드를 사용합니다.함수.call(this로_지정할_객체, 인자1, 인자2...)함수.apply(this로_지정할_객체, [인자1, 인자2...])함수.bind(this로_지정할_객체): this가 고정된 새로운 함수를 반환합니다.function introduce(city) {
console.log(`저는 ${this.name}이고, ${city}에 삽니다.`);
}
const user = { name: '이순신' };
// introduce 함수의 this를 user 객체로 강제하고, '서울'을 인자로 전달하여 호출
introduce.call(user, '서울'); // '저는 이순신이고, 서울에 삽니다.' 출력new 바인딩 (new Binding) 🔗new 키워드를 사용하여 new 키워드로 함수를 호출하면, 다음 일들이 순서대로 일어납니다.
this는 바로 이 return문이 없으면, this가 가리키는 새 객체가 자동으로 반환됩니다.function Person(name) {
this.name = name;
// return this; 가 암묵적으로 존재
}
const person1 = new Person('강감찬');
console.log(person1.name); // '강감찬' 출력 (this는 person1 객체)이미지 제안: 4가지 바인딩 규칙의 우선순위를 보여주는 피라미드. 최상단에new, 그 아래bind/call/apply,암시적, 최하단에전역(기본)을 배치하여 시각적으로 우선순위를 표현.

this를 가지지 않습니다.this를 그대로 물려받아 사용setTimeout이나 map 같은 콜백 함수 내부에서 this가 바뀌는 고질적인 문제를 매우 우아하게 해결할 수 있습니다.const user = {
name: '유관순',
getFriends: function() {
const friends = ['김구', '안중근'];
// 화살표 함수는 바깥 함수인 getFriends의 this(user 객체)를 그대로 사용합니다.
friends.forEach(friend => {
console.log(`${this.name}의 친구: ${friend}`);
});
}
};
user.getFriends(); // '유관순의 친구: 김구', '유관순의 친구: 안중근' 정상 출력this의 동작 원리는 자바스크립트의 실행 컨텍스트 이해도를 직접적으로 보여주므로, 반드시 출제되는 질문입니다.this는 어떻게 결정되나요? 🔗자바스크립트의this는 기본적으로함수가 호출되는 방식에 따라 동적으로 결정됩니다. 단독으로 호출되면 전역 객체나undefined를, 객체의 메서드로 호출되면 그 객체를,new키워드로 호출되면 새로 생성된 객체를, 그리고call이나apply를 사용하면 명시적으로 지정된 객체를 가리키게 됩니다.
this 바인딩 차이점을 설명해주세요. 🔗가장 큰 차이는this를 가지는지 여부입니다.일반 함수는 호출 방식에 따라this가 동적으로 결정되는 자신만의this를 가집니다. 반면,화살표 함수는 자신만의this를 가지지 않고, 대신 자신을 감싸고 있는상위 스코프의합니다. 이러한 렉시컬this를 그대로 물려받아 사용this특성 때문에, 콜백 함수 등에서this가 달라지는 문제를 쉽게 해결할 수 있습니다.
this 바인딩 원리에 대해 깊이 있게 알아보았습니다.this는 new**의 4가지 규칙이 있으며, 우선순위가 존재합니다.this 없이 상위 스코프의 this를 사용합니다.