코어 자바스크립트 This

소재현·2022년 11월 4일
0

This

함수와 객체(매서드) 구분이 느슨한 자바스크립트에서 this는 이 둘을 구분하는 유일한 기능을 한다.
this는 실행 컨텍스트가 생성될 때 함께 결정. 즉, this는 함수를 호출할 때 결정된다.

전역 공간에서 this

전역 공간에서 this는 전역 객체를 가리킨다.

var a = 1;

console.log(a); // 1
console.log(window.a); // 1
console.log(this.a); // 1

전역 변수를 선언하면 자바스크립트 엔진은 이를 전역객체의 프로퍼티로도 할당. 즉, 자바스크립트의 모든 변수는 실은 특정 객체의 프로퍼티로서 동작. 특정 객체란 실행 컨텍스트의 LexicalEnvironment. 실행 컨텍스는 변수를 수집해서 LexicalEnvironment의 프로퍼티로 저장

메서드 내부에서의 This?

함수는 그 자체로 독립적인 기능을 수행하고 메서드는 자신을 호출한 대상 객체에 관환 동작을 수행한다.
this에는 호출한 주체의 정보가 담긴다. 점 표기법의 경우 마지막 점 앞에 명시된 객체가 곧 this

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

함수로 호출하면 this가 지정되지 않는다.
ES6에서 함수 내부에서 this가 전역객체를 바라보는 문제를 보완하고자 화살표 함수 도입

콜백 함수 호출할 때 그 함수 내부에서의 this

콜백 함수도 함수이기 때문에 this는 기본적으로 전역객체를 바라본다. 하지만 제어권을 받은 함수에서 콜백 함수에 별도로 this가 될 대상을 지정한 경우 그 대상을 참조.

생성자 함수 내부에서의 this

어떤 함수가 생성자 함수로서 호출된 경우 내부에서의 this는 instance 자신이 됨
생성자 함수를 호출(new 명령어와 함께)하면 생성자의 prototype 프로퍼티를 참조하는 proto라는 프로퍼티가 있는 객체(instance)를 만든다.

0개의 댓글