[Core Javascript] 3. this

OFFDUTYBYBLO·2020년 10월 24일
0

JavaScript

목록 보기
29/40
post-thumbnail

1.상황에 따라 달라지는 this

  • 자바스크립트에서 this는 실행 컨텍스트가 생성될 때 함께 결정된다.
  • 실행 컨텍스트는 함수를 호출할 때 생성되므로, this는 함수를 호출할 때 결정된다.

1.1 전역 공간에서의 this

  • 전역 공간에서 this는 전역 객체를 가리킨다.
  • 브라우저 환경에서 전역객체는 window이고 Node.js 환경에서는 global이다.
  • 자바스크립트의 모든 변수는 특정 객체의 프로퍼티로서 동작한다.
  • 전역변수를 선언하면 자바스크립트 엔전은 이를 전역객체의 프로퍼티로 할당한다.

1.2 메서드로서 호출할 때 그 메서드 내부에서의 this

함수 vs 메서드

  • 어떤 함수를 호출할 때 그 함수 이름(프로퍼티명) 앞에 객체가 명시돼 있는 경우에는 메서드로 호출한 것이고, 그렇지 않은 모든 경우에는 함수로 호출한 것이다.
  • 함수를 호출하는 경우에 this는 window, 메서드로서 함수를 호출하는 경에 this 는 해당 메서드의 객체이다.

메서드 내부에서의 this

  • this에는 호출한 주체에 대한 정보가 담긴다.
  • 어떤 함수를 메서드로서 호출하는 경우 호출 주체는 바로 함수명 앞의 객체이다. 점 표기법의 경우 마지막 점 앞에 명시된 객체가 곧 this가 된다.

1.3 함수로서 호출할 때 그 함수 내부에서의 this

함수 내부에서의 this

  • 어떤 함수를 함수로서 호출할 경우에는 this가 지정되지 않는다. 실행 컨텍스트를 활성화할 당시에 this가 지정되지 않은 경우 this는 전역 객체를 바라본다.

메서드의 내부함수에서의 this

  • 메서드 내부에서 정의하고 실행한 함수에서의 this가 무조건 해당 객체를 가리키지 않는다.
  • this 바인딩에 관해서는 함수를 실행하는 당시의 주변 환경(메서드 내부인지, 함수 내부인지 등)은 중요하지 않고, 오직 해당 함수를 호출하는 구문 앞에 점 또는 대괄호 표기가 있는지 없는지가 관건이다.

메서드의 내부 함수에서의 this를 우회하는 방법

  • 메서드의 객체 내부에서 this를 변수로 선언하면 this는 해당 메서드의 객체로 바인딩된다.
profile
블로그 운영 x

0개의 댓글