2012-12-02 3 views
10

다음 코드가 있습니다. 자바 스크립트 모듈입니다.자바 스크립트 모듈

(Cahootsy.scope = (function() { 
     return this; 
    })()).Cahootsy = Cahootsy; 

나는 그것이 '이'모듈을 참조하는 객체를 만든 다음 글로벌 Cahootsy 변수에 Cahootsy 변수를 할당 생각 :

(function() { 

    // Object 
    var Cahootsy; 

    Cahootsy = { 
     hello: function() { 
      alert('test'); 
     }, 
    }; 

    (Cahootsy.scope = (function() { 
     return this; 
    })()).Cahootsy = Cahootsy; 

    return Cahootsy; 

}).call(this); 

나는 부분을 이해하지 않습니다. 왜 '이'가 Cahootsy에 할당되어야하는지 이해할 수 없습니다. 범위

답변

6

당신은 너무 좋아, 조금을 분해 할 수

var getScope = function() {return this;} 
Cahootsy.scope = getScope(); 
getScope().Cahootsy = Cahootsy; 

는 그것이 무엇이다하는 것은 (항상 보통 window 아니지만) 전역을 가져옵니다. 그런 다음 Cahootsy에서 개체의 scope 속성을 통해 전역 범위에 링크를 만들고 범위의 Cahoosty 속성을 통해 다른 방법으로 링크를 만듭니다.

결과적으로 브라우저에서 window.Cahootsy이 대상이되고 window.Cahootsy.scope이 창으로 돌아갑니다.

+0

왜 모듈이 전역 범위에 대한 참조를 보유합니까? 또한 'Cahootsy.scope = window'를 사용하지 않는 이유는 무엇입니까? –

+3

앞에서 언급했듯이 '창'이 항상 전역 범위가 아니기 때문입니다. 예를 들어, JavaScript가 Node.JS에서 실행될 때 브라우저가 없으므로 '창'이 없습니다. –

+0

이것은 전역 범위를 확보하는 해커처럼 보입니다! :) –

3

(function() { return this; })()은 글로벌 개체를 반환하는 트릭입니다.

이 문은 글로벌 개체에 Cahootsy.scope을 설정하고 (나중에 사용하기 위해) Cahootsy을 외부에 노출하도록 글로벌 개체의 속성을 설정합니다.

관련 문제