[JS] This keyword

JunSeok·2023년 12월 7일
0

Javascript

목록 보기
6/16

This keyword

this는 모든 execution context(function)를 위해 생성되는 특별한 변수 / 키워드이다.

this는 this가 사용된 함수의 소유자를 가리키는데, 이 값은 함수가 호출될 때 값이 결정되는 동적인 값이다.

global scope에서의 this는 단순히 window 또는 global 객체이다.

함수 호출 방식에 따라 달라지는 This keyword

Method(객체에 속한 함수)

  • Method에서의 this는 Method를 호출하는 객체를 가리킨다.
  • 객체에 있는 모든 프로퍼티에 접근할 수 있다.

정규 함수

  • (strict mode) 고유의 this keyword가 있지만, undefined값을 가진다. => 함수의 소유주가 없기 때문이다.
  • strict mode가 아니라면, 항상 전역 객체를 가린킨다.(브라우저의 경우 window, node.js의 경우 global)
    해당 이유로 인해 strict mdoe를 사용할 것을 권장한다.

Arrow function

  • Arrow function은 고유의 this keyword를 가지지 않는다.
  • 대신 this를 사용하면 이 this는 상위 함수의 this를 가리킨다. 이때 가져오는 this를 Lexical this라 부른다.
  • scope chain처럼 Arrow function에서는 this값을 찾을 수 없으니 this 값을 찾으러 선언 위치를 기준으로 상위 scope를 확인하는 것과 같다.
  • 상위 함수가 없는 global scope에서의 arrow function의 this는 당연히 전역 객체를 가리키게 된다.

EventListener

  • EventListener 함수 내의 콜백함수 내에서 this는 항상 DOM element를 가리킨다.
  • 화살표 함수가 아닌 정규 함수를 사용해야 한다.

정규 함수 vs Arrow function

메서드 선언할 때

  • arrow function은 고유의 this keyword가 없으니 this를 사용하지 않더라도 메서드를 선언할 때는 arrow function이 아닌 정규 함수를 사용하자.
  • 특정 객체의 존재하지 않는 property에 접근했을 경우 에러가 나지 않고 undefined를 리턴하기 때문에 실수가 생길 수 있다.

메서드 내의 함수 선언할 때

  • 메서드 안의 정규 함수는 this가 있긴 하지만 값은 undefined이다.
  • 이를 해결하기 방법은 정규 함수 밖에서 변수에 this값을 저장해 사용한다.
  • 하지만 arrow function을 사용하면 더 쉽게 해결할 수 있다.
  • arrow function은 고유의 this keyword가 없고 상위 Lexical this를 사용하기 때문에 변수에 저장할 필요 없이 arrow function 내의 this를 사용하면 된다.

참조

https://poiemaweb.com/js-this
https://poiemaweb.com/js-strict-mode
https://www.udemy.com/course/the-complete-javascript-course/

profile
최선을 다한다는 것은 할 수 있는 한 가장 핵심을 향한다는 것

0개의 댓글