Programing/javascript

자바스크립트 this 키워드 제대로 이해하기 (함수 / 객체 / 클래스에서)

2025. 4. 23. 11:29
반응형

자바스크립트의 this는 문맥(context)에 따라 다르게 동작하는 독특한 키워드입니다. 함수, 객체, 클래스 등 다양한 구조에서 this가 어떻게 달라지는지 제대로 이해하지 않으면 예기치 못한 결과를 초래할 수 있습니다. 이 글에서는 상황별 this의 의미와 사용법을 예제와 함께 설명합니다.


✨ 전역 컨텍스트에서의 this

console.log(this); // 브라우저에서는 window, Node.js에서는 global
  • 전역에서의 this는 브라우저에선 window 객체를, Node.js에선 global 객체를 참조합니다.

✨ 일반 함수에서의 this

function show() {
  console.log(this);
}
show(); // 브라우저 기준: window (strict 모드에서는 undefined)
  • 일반 함수에서의 this는 호출 위치에 따라 달라지며, use strict 모드에서는 undefined가 됩니다.

✨ 객체 메서드에서의 this

const user = {
  name: "Alice",
  greet: function() {
    console.log(this.name);
  }
};
user.greet(); // "Alice"
  • 객체의 메서드에서 this는 해당 객체를 가리킵니다.

✨ 화살표 함수에서의 this

const user = {
  name: "Bob",
  greet: () => {
    console.log(this.name);
  }
};
user.greet(); // undefined
  • 화살표 함수는 자신의 this를 가지지 않고 상위 스코프의 this를 상속받습니다.
  • 주로 콜백 함수나 클래스 내 메서드에서 유용하게 사용됩니다.

✨ 클래스에서의 this

class Person {
  constructor(name) {
    this.name = name;
  }
  greet() {
    console.log(`Hi, I'm ${this.name}`);
  }
}
const p = new Person("Charlie");
p.greet(); // "Hi, I'm Charlie"
  • 클래스 내부 메서드에서의 this는 인스턴스를 가리킵니다.

✨ 이벤트 핸들러에서의 this

document.querySelector("button").addEventListener("click", function() {
  console.log(this); // 클릭된 버튼 요소
});
  • 일반 함수로 작성된 이벤트 핸들러에서 this는 이벤트가 발생한 요소를 참조합니다.
  • 화살표 함수를 사용할 경우에는 this가 외부 스코프를 가리킵니다.

✅ 요약

상황
this가 참조하는 대상
전역 window 또는 global
일반 함수 호출 컨텍스트 (또는 undefined)
객체 메서드 해당 객체
화살표 함수 상위 스코프의 this
클래스 메서드 인스턴스
이벤트 핸들러 이벤트 대상 (function)

✨ 결론

this는 자바스크립트에서 문맥에 따라 달라지는 동적인 키워드입니다. 함수 선언 방식에 따라 참조 대상이 달라지므로, 의도한 대상을 정확히 가리키기 위해선 화살표 함수와 일반 함수의 차이를 이해하고 상황에 맞게 사용하는 것이 중요합니다.

반응형

'Programing > javascript' 카테고리의 다른 글

자바스크립트 debounce와 throttle 차이 및 성능 최적화 예제  (0) 2025.04.24
자바스크립트 IIFE 패턴(즉시 실행 함수 표현식)의 쓰임새와 모던 대안  (0) 2025.04.24
자바스크립트 클로저(Closure)의 개념과 실전 활용 예제  (0) 2025.04.24
자바스크립트 비동기 처리 개념 정리(setTimeout, Promise, async/await)  (0) 2025.04.23
자바스크립트 == vs === 비교 연산자의 차이와 올바른 사용법  (0) 2025.04.23
자바스크립트의 데이터 타입 완전 정복 (typeof, null, undefined)  (0) 2025.04.23
자바스크립트의 var, let, const 차이와 올바른 사용법  (0) 2025.04.23
javascript 비밀번호 유효성 검사  (0) 2025.04.22
'Programing/javascript' 카테고리의 다른 글
  • 자바스크립트 클로저(Closure)의 개념과 실전 활용 예제
  • 자바스크립트 비동기 처리 개념 정리(setTimeout, Promise, async/await)
  • 자바스크립트 == vs === 비교 연산자의 차이와 올바른 사용법
  • 자바스크립트의 데이터 타입 완전 정복 (typeof, null, undefined)
Dongkkase
Dongkkase
개발자로 일하면서 부딪히는 문제풀이가 누군가에게 도움이 되길 바라며
    반응형
  • Dongkkase
    정집사의 개발로그
    Dongkkase
  • 전체
    오늘
    어제
    • All (478)
      • 금융 (61)
      • Programing (295)
        • Algorithm (39)
        • API (2)
        • javascript (122)
        • CSS (8)
        • HTML (10)
        • PHP (15)
        • JAVA (27)
        • JSP (17)
        • JSP 예제 (1)
        • IOS (1)
        • Android (1)
        • Sencha Touche (1)
        • bat file, cmd (0)
        • 디버깅 (2)
        • SQL (21)
        • MS-SQL (1)
        • MySQL (13)
        • 보안 (5)
      • Server (14)
        • Docker (1)
        • Windows (9)
        • Linux (3)
        • jeus (1)
      • Database (6)
      • IT 일반 (15)
      • 리뷰 (38)
        • Book (17)
        • 제품 (2)
        • 영화 소개 (11)
        • 음악 소개 (7)
      • 잡생각 (36)
        • 회고 (3)
        • 컬럼 (4)
        • 자료실 (6)
        • 낙서장 (12)
        • 위시리스트 (2)
        • WOW (1)
        • 덕 (1)
  • 인기 글

  • 최근 댓글

  • 태그

    iT's MY LiFE
    블로그
    JavaScript
    기초
    자바
    SQL
    js패턴
    사고 싶은 책
    IT블로그
    자바스크립트
    It
    php
    jsp
    자바스크립트유틸
    IT 관련
    위시리스트
    디자인패턴
    IT·컴퓨터
    Java
    읽고 싶은 책
Dongkkase
자바스크립트 this 키워드 제대로 이해하기 (함수 / 객체 / 클래스에서)
상단으로

티스토리툴바