2016-06-30 5 views
0

모든 코드가 내부에 싸여있다 :IIFE로 포장했을 때 자바 스크립트 라이브러리는 어떻게 사용할 수 있습니까? 실행 컨텍스트가 삭제되지 않았습니까? 밑줄 JS 라이브러리에서

(function() { 
    //rest of library etc. 
}.call(this)); 

내가 (의() 함수를 감싸는 것을 이해하는 것은) 네임 스페이스 목적이며, .call (이) 시작 통과에 라이브러리를 호출하는 window 객체.

그러나 일단 내 실행 컨텍스트가 실행 완료되면 '삭제'됩니다. 그렇다면이 라이브러리의 모든 코드는 다른 스크립트 파일에서 어떻게 사용할 수 있습니까?

질문에 답을하고있다하지만 내 머리에이 질문을 가져왔다 :

이 지금 나에게 의미가 있습니다. 이 함수는 실행되고 라이브러리를 윈도우 객체에 연결합니다. 그러나이 접근법을 사용할 때 라이브러리는 동일한 객체 이름을 윈도우 객체에 첨부하면 서로 덮어 쓸 수 있습니다. 어떤 점 통화 기능 이후

//library code starts 
(function(){ 

    this.hello = function(){ 
     console.log("asd"); 
    } 

}).call(this); 
//library code ends 


//outside the library 
//will print the function showing that it is available outside the library 
console.log(window.hello); //will print the function 
console.log(hello); 

//will console.log hello 
hello(); 

이 함께 인생을 호출 (:

이 개념은 간단한 예제 여기에 설명 할 수
var library1 = function(
    var func1 = function(){ 

    }; 
    return { 
    func1: func1 
    })(this); 
+2

글로벌 상태를 수정합니다. 'window.myNamespace = {stuff}'. 'stuff'는 (비록 다른 것은 없지만) 어휘 적 종료 때문에 IIFE의 실행 컨텍스트에 대한 액세스 권한을 계속 갖습니다. –

답변

2

:

것은하지 그런 짓을하는 것이 바람직 할 것인가 window 객체로), window 객체의 값을 라이브러리 코드 외부에서 가져오고 싶다면 쉽게 얻을 수 있습니다.

hello 함수는 window 객체에 바인드되므로 라이브러리 코드 외부에서 호출 할 수 있습니다.

이것은 윈도우 개체에 바인딩 된 모든 함수 또는 변수에 적용됩니다.

특정 함수가 호출 될 때 실행 문맥에서만 이루어진다 또는 일부 변수/객체가 사용되는 실행 콘텍스트

이해.

각 호출 된 함수에 대해 실행이 완료되면 해제되는 다른 실행 컨텍스트가 만들어집니다. 그렇다고해서이 경우 객체 (윈도우)가 더 이상 메모리의 일부가되지는 않는다는 의미는 아닙니다.

다른 인수로 함수를 10 회 호출 할 수 있으며 런타임에 메모리를 할당하고 실행이 완료되면이를 파괴하는 10 가지 실행 컨텍스트를 만듭니다. 그것은로드되는 라이브러리 코드와 아무 관련이 없습니다.

+0

이것은 나에게 의미가 있습니다. 이 함수는 실행되고 라이브러리를 윈도우 객체에 연결합니다. 그러나이 접근법을 사용하면 라이브러리가 동일한 객체 이름을 창 객체에 첨부하면 서로 겹쳐 쓸 수 있습니다.(; 반환 { 에서 func1 : FUNC1 } var에 FUNC1 = 함수() { } ) var에 library1 = 기능 : 같은 것을 할 바람직하지 않을까요 (이); –

+0

@JackClark 차이는 없습니다. 'library1'은 똑같은 방식으로 노출됩니다. – JJJ