2013-07-13 100 views
2

我遇到了一個自執行函數,它在聲明的包含var存在的條件下執行,如果不存在則傳遞一個對象。條件執行後自動執行函數傳遞對象

實施例:

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

爲什麼存在是傳遞對象的「或」條件操作?

+0

問題是什麼? – mishik

回答

0
var myFunc = (function(myFunc){}(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 || {})); 

在這個例子中涼爽被定義一個變量的defualt值是undefined 所以在這種情況下,它是未定義所以參數是一個對象,而不是

6

你提供的代碼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 2 

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

    return my; 
}(MODULE)); 
在隆乳術 file 1的這種模式

但是必須file 2之前加載,否則你會得到一個錯誤。鬆散擴充允許您以任何順序加載文件。

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

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

在上面的例子的模塊MODULE可被劃分在其上可以以任何順序裝入多個文件。如果它存在,則表達式MODULE || {}評估爲MODULE。否則,它評估爲{}

因此,對於第一個加載的文件,表達式將評估爲{},因爲MODULE最初將爲undefined。在隨後的文件中,表達式將評估爲MODULE

+0

+1用於明確的增強示例。不過,我想語法'obj || {}'你在最後一句中回答的問題主要受到質疑。 – laika