[JavaScript] JavaScript 클래스 - this

2022. 9. 23. 23:39·🍞 FrontEnd/JavaScript

일반 함수와 화살표 함수는 헷갈리지만 그만큼 매우 중요한 개념이다!

📌 일반(Normal) 함수는 호출 위치에서 따라 this 정의
📌 화살표(Arrow) 함수는 자신이 선언된 함수 범위에서 this 정의

 

일반 함수는 normal이 호출되는 부분에서 this가 정의된다.

YeJin이 곧 this이고 name 부분을 꺼내서 쓴다.

 

이와 다르게 화살표 함수는 호출 위치와 전혀 상관없이 선언될 때 this가 무엇인지 알 수 있다.

현재 선언된 코드에선 this를 정확하게 알 수 없는데 name이라는 속성을 찾으려고 하기 때문에 undefined가 출력된다. 

 

 

YeJin의 noraml 함수 자체가 amy의 normal 함수에 할당된다. 그러므로 호출된 위치에 있는 name이 Amy로 바뀌어 출력되는 것을 볼 수 있다. 그러나 amy의 arrow 함수는 선언된 위치에서 this가 정의되기 때문에 호출 위치와는 전혀 상관없이 똑같이 undefined가 나온다.

일반 함수: amy가 곧 this이고 this의 name이 Amy이다.

화살표 함수: 함수가 만들어진 위치에서 this가 정의되어 undefined다.

 

 

❗생성자 함수일 경우에도 같은 결과

 

❗setTimeout일 경우

일반함수 => 호출 위치에 따라 this 정의

어디서 함수가 호출되는지 찾아야 한다!

setTimeout이라는 내부 로직으로 콜백이 들어가서 실행이 되기 때문에 undefined가 출력된다.

 

화살표 함수 => 자신이 선언된 함수 범위에서 this 정의

화살표 함수를 감싸고 있는 또 다른 함수는 timeout이라는 메서드를 정의할 때 사용한 함수이다.

이 범위에서 this가 정의되고, 함수 부분의 this는 곧 일반 함수가 정의된 timer라는 객체 데이터를 가리킨다. 

 

 

setTimeout, setInterval일 경우 콜백으로 화살표 함수를 쓰는 것이 좋다. 

 

자바스크립트의 이미 정의되어있는 함수 어딘가에서 정의되는 것이 아니라

명확하게 작성한 특정 범위에서 this가 정의되기 때문이다. 

 

저작자표시 (새창열림)

'🍞 FrontEnd > JavaScript' 카테고리의 다른 글

[JavaScript] Ajax 대해서 알아보자!  (0) 2022.09.29
[JavaScript] JavaScript 클래스 - ES6 Classes  (0) 2022.09.24
[JavaScript] JavaScript 클래스 - 생성자 함수(prototype)  (2) 2022.09.23
[JavaScript] JavaScript 함수 - 콜백(Callback)  (0) 2022.09.23
[JavaScript] JavaScript 함수 - 타이머 함수  (2) 2022.09.23
'🍞 FrontEnd/JavaScript' 카테고리의 다른 글
  • [JavaScript] Ajax 대해서 알아보자!
  • [JavaScript] JavaScript 클래스 - ES6 Classes
  • [JavaScript] JavaScript 클래스 - 생성자 함수(prototype)
  • [JavaScript] JavaScript 함수 - 콜백(Callback)
박빵이
박빵이
2025년에도 갓생살기
  • 박빵이
    기억보다 기록
    박빵이
  • 전체
    오늘
    어제
    • 분류 전체보기 (337)
      • 🍞 FrontEnd (97)
        • HTML+CSS (4)
        • JavaScript (17)
        • TypeScript (4)
        • React (52)
        • Next.js (2)
        • Android (15)
      • 🍞 BackEnd (24)
        • Java (15)
        • Node.js (6)
        • Spring (1)
      • 🍞 Cloud & Infra (0)
        • AWS SAA (0)
        • Microsoft Azure (0)
      • 🍞 Algorithm (147)
        • C++ (4)
        • Baekjoon (41)
        • Programmers (97)
      • 🍞 Computer Science (18)
        • 운영체제 (1)
        • 데이터 통신 (6)
        • 네트워크 (6)
        • 데이터베이스 (1)
      • 🍞 대외활동 & 부트캠프 (42)
        • 삼성 청년 SW 아카데미 (1)
        • LG유플러스 유레카 (0)
        • 한국대학생IT경영학회 (1)
        • IT연합동아리 UMC (17)
        • 길벗 블로깅 멘토 (18)
        • IT연합동아리 피로그래밍 (3)
        • 개발 컨퍼런스 (2)
  • 블로그 메뉴

    • Admin
  • 링크

    • GitHub
  • 인기 글

  • 태그

    길벗 블로깅 멘토
    Front
    유니온파인드
    Java
    길벗 블로깅 멘토링
    안드로이드
    코틀린
    백준
    level2
    위상정렬
    umc
    프로그래머스
    map
    알고리즘
    코딩자율학습
    Android
    react
    level1
    C++
    JavaScript
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
박빵이
[JavaScript] JavaScript 클래스 - this
상단으로

티스토리툴바