함수가 호출될 때 결정되는 실행 컨텍스트가 생성될 때 함께 결정되는 this
this에는 호출한 주체에 대한 정보가 담긴다.
전역 공간에서 this는 전역 객체이다. (browser : window, Node.js : global)
전역 변수 선언 > 전역객체의 프로퍼티로도 할당
var a =1 ;
console.log(a);
console.log(window.a);
console.log(this.a);
JS 엔진은 모든 변수를 어떤 특정 객체(실행 컨텍스트의 Lexical Environment)의 프로퍼티로 인식
var a 에도 값이 나오는 이유는 스코프 체인 덕이다. 스코프 체인을 통해서 전역 스코프까지 가서 전역 객체에서 프로퍼티를 발견, 반환하게 되는 것이다.
따라서 window 객체에 할당하는거나 변수에 할당하는거나 비슷할 수 있다. 단, 제거할 때만 빼고
// 할당
window.a = 3;
var b= 4;
console.log(a,window.a,this.a); //333
console.log(b,window.b,this.b); //444
// 제거
window.a = 3;
delete a;
console.log(a,window.a,this.a) // ReferenceError : a is not defined
var a = 3;
delete a;
console.log(a,window.a,this.a) // 3 3 3
window 객체로 할당해야만 delete로 사라지는 것을 확인할 수 있다.
| 일반 function | method |
|---|---|
| 독립적 | 비독립적(자신을 호출한 대상 객체에 관한 동작을 수행한다.) |
| .이 앞에 있다. (객체 앞에 프로퍼티로 쓰인 함수이다.) | |
| this는 전역 | 자신을 호출한 객체 |
객체의 메서드로 호출할 경우에만 method라고 할 수 있다.