2013-07-13 2 views

답변

0
var myFunc = (function(myFunc){}(myFunc||{})); 

이는 이해가되지 않습니다 - 내가 그에 의해 혼란 스러워요.

아픈 정의 된이 예제 시원한에서

첫 번째 예

var cool = { 
    person: 'john' 
}; 

(function(Argument){ 
    console.log(Argument); // Result Object {person: "john"} 
}(cool || {})); 

을 수행하고이 늘 ||


지나 갈 수 있도록 객체 하나를 설명

다음 시험 이 예제의 멋진 르

var cool; 
(function(Argument){ 
    console.log(Argument); // Result Object {} 
}(cool || {})); 

그러나을 정의 된 변수에 대한 만들면 기본적 값이 너무 인수는 개체 대신에 제공 한 코드가

6

입니다 정의되지 않은이 경우 너무 undefined 입니다 module pattern의 예입니다. 특히 그것은 모듈 패턴의 loose augmentation의 예입니다.

모듈 패턴은 기본적으로 객체를 반환하는 immediately invoked function expression (IIFE)입니다. 예 :

// file 1 

var MODULE = (function() { 
    var my = {}, privateVariable = 1; 

    function privateMethod() { 
     // ... 
    } 

    my.moduleProperty = 1; 

    my.moduleMethod = function() { 
     // ... 
    }; 

    return my; 
}()); 

증감을 사용하면 모듈을 여러 부분으로 나눌 수 있습니다. 각 파트는 자체 파일에 상주 할 수 있습니다. 확대 file 1의 패턴 그러나

// file 2 

var MODULE = (function (my) { 
    my.anotherMethod = function() { 
     // added method... 
    }; 

    return my; 
}(MODULE)); 

file 2 전에로드해야합니다 그렇지 않으면이 오류가 발생합니다 : 예를 들어 다음과 같이 우리는 위의 모듈을 보강 할 수 있습니다. 루스 보강을 사용하면 임의의 순서로 파일을로드 할 수 있습니다. 모듈 MODULE는 임의의 순서로 로딩 될 수있는 다수의 파일을 통해 분할 될 수도 상기 예에서

var MODULE = (function (my) { 
    // add capabilities... 

    return my; 
}(MODULE || {})); 

. MODULE || {}이라는 표현식은 MODULE으로 평가됩니다. 그렇지 않으면 {}으로 평가됩니다.

로드 된 첫 번째 파일의 경우 은 처음에 undefined이 될 것이므로 표현식은 {}으로 평가됩니다. 후속 파일에서 표현식은 MODULE으로 평가됩니다.

+0

+1 명확한 증가 예제입니다.그러나 구문'obj || 마지막 문장에서 당신이 답한 {}'은 주로 질문을 받았습니다. – laika

관련 문제