01. 상황에 따라 달라지는 this
- this는 기본적으로 실행 컨텍스트가 생성될 때 결정
⇒ 함수를 호출할 때 결정된다. → 어떤 방식으로 호출하느냐에 따라 this가 달라짐
3-1-1 전역공간에서의 this
⇒ 전역 객체 (전역 컨텍스트를 생성하는 주체가 바로 전역 객체이기 때문에)
⇒ 런타임 환경에 따라 다름 (브라우저→ Window, Node.js → global …)
- 전역 변수를 선언하면 자바스크립트 엔진은 전역 객체의 프로퍼티를 할당
- 자바스크립트의 모든 변수는 실은 특정 객체(실행 컨텍스트의 Lexical Environment)의 프로퍼티
- 전역변수를 선언하면
- 자바스크립트 엔진이 전역 객체의 프로퍼티로 할당
- configuable 속성(변경 및 삭제 가능성)을 false로 정의 (delete가 안되는 이유!)
3-1-2 메서드로서 호출할 때 그 메서드 내부에서의 this
⇒ 호출한 주체(객체)에 대한 정보
var func = function (x){
console.log(this, x);
}
func(1); // Window { ... } 1
- 메서드로서 호출 → 자신을 호출한 대상 객체의 관한 동작 수행 (obj.method())
var obj = {
method: func
}
obj.methd(2); // {method: f} 2
3-1-3 함수로서 호출할 때 그 함수 내부에서의 this
- 함수 내부에서의 this ⇒ this가 지정되지 않기 때문에 전역객체