2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

자바스크립트의 this 키워드는 무엇을 의미하나요?

_____
Q: 자바스크립트에서 this 키워드는 무엇인가요?
A: this는 현재 실행 문맥(context)을 가리키는 특별한 키워드로, 함수가 호출되는 방식에 따라 참조 대상이 달라집니다.

Q: this는 언제 어떤 값을 가지나요?
A: this의 값은 함수 호출 시점과 방식에 따라 결정됩니다. 일반적으로 다음과 같습니다:
1. 전역 함수에서 this는 전역 객체(window, node의 global)를 참조합니다.
2. 객체 메서드에서 this는 해당 메서드를 호출한 객체를 가리킵니다.
3. 생성자 함수에서 this는 새로 생성된 객체를 가리킵니다.
4. 화살표 함수에서는 this가 상위 스코프의 this값을 그대로 사용합니다.
5. 명시적으로 call, apply, bind로 this를 지정할 수 있습니다.

Q: 객체 메서드 내에서 this는 무엇을 가리키나요?
A: 일반 함수가 객체의 메서드로 호출될 때 this는 해당 객체를 가리킵니다. 예를 들어 obj.method()라면 메서드 내부 this는 obj입니다.

Q: 화살표 함수에서 this는 어떻게 동작하나요?
A: 화살표 함수는 자신만의 this를 가지지 않고, 상위 스코프의 this를 렉시컬(정적)으로 바인딩합니다. 따라서 화살표 함수 내 this는 주변 함수나 전역의 this와 동일합니다.
Q: 생성자 함수에서 this는 어떤 역할을 하나요?
A: new 키워드와 함께 호출된 생성자 함수 내 this는 새로 생성된 빈 객체를 가리킵니다. 이때 this에 프로퍼티와 메서드를 할당하면 새 객체의 속성이 됩니다.

Q: call, apply, bind 메서드와 this의 관계는?
A: call과 apply 메서드는 함수 실행 시 this 값을 명시적으로 지정할 수 있게 해줍니다. bind는 this 값이 고정된 새로운 함수를 반환합니다.

Q: 엄격 모드('use strict')에서 this는 어떻게 달라지나요?
A: 엄격 모드에서 전역 함수 호출 시 this는 undefined가 되며, 그렇지 않으면 암묵적인 전역 객체 바인딩이 방지됩니다. 이는 버그를 줄이는 데 도움을 줍니다.

Q: class 문법 내에서 this는 무엇을 의미하나요?
A: class 내 메서드에서 this는 해당 클래스 인스턴스를 가리킵니다. 생성자에서 this는 새 인스턴스를 나타냅니다.

Q: this를 이해하는 데 어려움이 있는 이유는?
A: this는 함수가 호출되는 컨텍스트에 따라 값이 달라지고, 특히 화살표 함수, 엄격 모드, 이벤트 핸들러 등에서 차이가 발생해 혼동을 일으키기 때문입니다.

Q: this를 어떻게 쉽게 이해할 수 있을까요?
A: 함수를 호출하는 방식과 위치에 집중해서 생각하고, call, apply, bind, 화살표 함수의 this 동작 차이를 직접 실습해 보는 것이 가장 효과적입니다.
자바스크립트에서 `this` 키워드는 매우 중요한 개념으로, 코드의 실행 컨텍스트에 따라 다르게 해석됩니다.

`this`는 객체 지향 프로그래밍에서 객체를 참조하는 데 사용되며, 자바스크립트에서는 함수가 호출되는 방식에 따라 `this`의 값이 결정됩니다.

이를 이해하기 위해서는 다양한 상황에서 `this`가 어떻게 작동하는지를 살펴봐야 합니다.

1. 전역 컨텍스트에서의 `this` 전역 컨텍스트에서 `this`는 전역 객체를 참조합니다.

브라우저 환경에서는 `this`가 `window` 객체를 가리킵니다.

예를 들어: ```javascript console.log(this); // window 객체를 출력 ```

2. 함수 호출에서의 `this` 함수 내에서 `this`는 함수가 호출되는 방식에 따라 다르게 결정됩니다.

- 일반 함수 호출 : 일반 함수로 호출될 때 `this`는 전역 객체를 참조합니다.

(strict mode에서는 `undefined`) ```javascript function showThis() { console.log(this); } showThis(); // window 객체 (strict mode가 아닐 경우) ``` - 메서드 호출 : 객체의 메서드로 호출될 때 `this`는 해당 메서드를 소속한 객체를 참조합니다.

```javascript const obj = { name: 'Alice', greet: function() { console.log(this.name); } }; obj.greet(); // 'Alice' ```

3. 생성자 함수에서의 `this` 생성자 함수에서 `this`는 새로 생성된 객체를 참조합니다.

`new` 키워드를 사용하여 생성자 함수를 호출할 때, `this`는 생성된 인스턴스를 가리킵니다.

```javascript function Person(name) { this.name = name; } const person1 = new Person('Bob'); console.log(person1.name); // 'Bob' ```

4. 화살표 함수에서의 `this` 화살표 함수는 일반 함수와는 다르게 `this`를 lexically(어휘적으로) 바인딩합니다.

즉, 화살표 함수가 정의된 위치에서 `this`의 값을 가져옵니다.

따라서 화살표 함수 내에서 `this`는 외부 컨텍스트의 `this`를 참조합니다.

```javascript const obj = { name: 'Charlie', greet: function() { const innerFunc = () => { console.log(this.name); }; innerFunc(); } }; obj.greet(); // 'Charlie' ```

5. `call`, `apply`, `bind` 메서드 자바스크립트에서는 `call`, `apply`, `bind` 메서드를 사용하여 `this`의 값을 명시적으로 설정할 수 있습니다.

- call : 함수 호출 시 `this`를 지정할 수 있습니다.

```javascript function greet() { console.log(this.name); } const obj = { name: 'David' }; greet.call(obj); // 'David' ``` - apply : `call`과 유사하지만, 인자를 배열로 전달합니다.

```javascript function introduce(greeting) { console.log(`${greeting}, my name is ${this.name}`); } const person = { name: 'Eve' }; introduce.apply(person, ['Hello']); // 'Hello, my name is Eve' ``` - bind : 새로운 함수를 생성하고, `this`를 고정하여 해당 함수를 호출할 수 있습니다.

```javascript const person = { name: 'Frank' }; const greetFrank = greet.bind(person); greetFrank(); // 'Frank' ```

6. strict mode에서의 `this` 자바스크립트의 strict mode에서는 `this`가 `undefined`로 설정됩니다.

즉, 함수가 호출될 때 `this`가 전역 객체를 참조하지 않도록 강제합니다.

```javascript 'use strict'; function showThis() { console.log(this); } showThis(); // undefined ``` 결론 자바스크립트의 `this` 키워드는 함수 호출 방식에 따라 다르게 해석되며, 이를 이해하는 것은 자바스크립트 프로그래밍에서 매우 중요합니다.

`this`의 동작 방식은 코드의 흐름과 객체 지향 프로그래밍의 개념을 이해하는 데 필수적이며, 다양한 상황에서 `this`를 올바르게 사용하는 것은 자바스크립트 개발의 핵심입니다.

작성자: 정수영 [비회원] | 작성일자: 1년 전 2024-09-08 14:47:23
조회수: 262 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.