뇌운동일지

this 는 함수 호출 방식에 의해 결정 본문

JavaScript

this 는 함수 호출 방식에 의해 결정

purpleduck 2020. 9. 23. 18:02

- 아래의 글을 공부하며 정리한 내용

poiemaweb.com/js-this

 

this | PoiemaWeb

자바스크립트의 this keyword는 Java와 같은 익숙한 언어의 개념과 달라 개발자에게 혼란을 준다. Java에서의 this는 인스턴스 자신(self)을 가리키는 참조변수이다. this가 객체 자신에 대한 참조 값을 ��

poiemaweb.com

 

자바스크립트의 함수는 호출될 때, 

매개변수로 전달받는 인자값 이외에 

arguments 객체와 this를 암묵적으로 전달받음 

 

자바스크립트는 함수 호출 방식에 의해 this에 바인딩할 객체가 동적으로 결정 

 

함수를 호출하는 방식 

1. 함수 호출 

2. 메소드 호출 

3. 생성자 함수 호출 

4. apply / call / bind 호출 

 

1. 함수 호출 

전역객체(Global Object)는 모든 객체의 유일한 최상위 객체를 의미 

일반적으로 Browser-side에서는 window 

Server-side(Node.js)에서는 global 객체 의미 

 

전역객체는 전역 스코프(Global Scope)를 갖는 전역변수(Global variable)를 프로퍼티로 소유 

글로벌 영역에 선언한 함수는 전역객체의 프로퍼티로 접근할 수 있는 전역 변수의 메소드 

 

기본적으로 this는 전역객체(Global object)에 바인딩 

전역함수는 물론이고, 내부함수의 경우에도 this는 외부함수가 아닌 전역객체에 바인딩 

 

내부함수는 일반 함수, 메소드, 콜백함수 어디에서 선언되었든 관계없이 this는 전역객체를 바인딩 

(설계 단계의 결함, 메소드가 내부 함수를 사용하여 자신의 작업을 돕게 할 수 없다는 의미 by더글라스 크락포드)

-> 내부함수의 this가 전역객체를 참조하는 것을 회피하는 방법 

apply, call, bind 메소드 사용하여 this 를 명시적 바인딩 

 

2. 메소드 호출 

함수가 객체의 프로퍼티 값이면 메소드로서 호출 

이때 메소드 내부의 this 는 해당 메소드를 소유한 객체, 즉 메소드를 호출한 객체에 바인딩 

 

'JavaScript' 카테고리의 다른 글

[JavaScript] 문자열 처리  (0) 2021.04.01
indexOf()  (0) 2021.03.09
JavaScript 참고할만한 책과 개념정리  (0) 2020.09.22
JS for, for in  (0) 2020.09.22
[vanillaJS] var, let, const  (0) 2020.09.21
Comments