2016-11-15 1 views
0

여기 누군가가이 모든 것을 우리 모두를 위해 곧바로 얻을 수 있습니까? 내가 parent.child() 를 호출 할 때자바 스크립트와이 키워드의 문맥

var parent = {child: function(){ 
     console.log(this); 
     var log = function(){ 
     console.log(this);}; 
     log(); 
    } 
} 

내가 얻을 : 모질라에

Object{} 
Window{} 

다른 사람/문서는이 기능이 어떤 맥락없이 호출 된 것을 말한다. 및

this 

은 함수가 호출되는 객체입니다. 내가 이해할 수없는 것은 다른 개체 내의이 함수가 컨텍스트없이 어떻게 간주되는지 (따라서 this은 전역 개체로 기본값 설정 됨)입니다. 여기에 논리가 뭐니? 감사합니다

+0

'log'는 컨텍스트없이 호출된다. 컨텍스트를 사용하여 호출하려면'log.call (this)'을 수행해야합니다. 컨텍스트가 없으면 엄격 모드에서'undefined'라는 엉성한 모드에서'window'를 얻습니다. – trincot

+0

http://stackoverflow.com/questions/111102/how-do-javascript-closures-work – epascarello

+0

감사. 나는 그것을 안다. 내가 궁금해하는 것은 그것이 문맥없이 어떻게 불려지는지입니다. – BlackLog

답변

0

개체에서 참조되는 함수는 메서드와 같습니다. 객체를 색인화하여 함수를 직접 호출하면이 객체는 함수가 생성 할 범위의 this에 의해 참조됩니다.

객체를 인덱싱없이 또는 엄격 모드에서 아니다 (하거나 엄격 모드에서 전역에서 적어도이면 (apply, bind, call와, ...) this 컨텍스트를 설정하지 않고 함수를 호출 할 때) this은 전역 개체 여야합니다.

개체가 클래스/인터페이스/함수의 인스턴스 인 경우 해당 메서드는 this에 대해서도이 동일한 개체를 캡처합니다.

이것은 나를 위해 작동 방법은 다음과 같습니다

(function() { 
    'use strict' 
    console.log(this) // undefined 
})() 

console.log(this) // Window{}