2015-08-24 50 views
0

我一直在使用JavaScript開發應用程序,並且所有腳本都使用了模塊模式。例如:以相同結果寫成兩種不同方式的JavaScript模塊模式

   var MyFunction = (function(){ 


      }()); 

我看到了某人將函數的名稱放在了calling()中。例如:

  var MyFunction = (function(){ 


     }(MyFunction)); 

我添加到我的一些頁面,它仍然正常運行。任何人都可以解釋爲什麼它會寫入()中的函數名稱?

+0

可能是因爲你的功能沒有任何參數,所以它不關心傳入的內容。 –

+0

閱讀關於IIFE,它將變得清晰。 – dfsq

+0

在這種情況下,它幾乎肯定不會。 –

回答

2

任何人都可以解釋爲什麼它會寫在()中的 函數的名稱?

不是。那個編碼器不知道他們在做什麼。 (很多往往被甩在當有人並不想打破工作代碼)

這就是說,有一些情況下,您會通過東西到IIFE,像windowjquery。不過,你可以把它當作內部的一個參數。

+0

謝謝。這是有道理的,它只是一個參數傳遞給函數。 – jmoneilthe2

0

您展示的兩個版本是等價的,但第二個版本是誤導性的:不使用IIFE的參數。

你可能想傳遞(和使用)的參數模塊IIFE到別名扶養:

var myModule = (function(t) { 
    //... 
    var someText = t('some.key'); 
    //... 
})(translationModule); 

的另一個用途是對你的第二個例子是聲明的一個參數IIFE,和一無所獲。這是爲了確保undefined是...不確定:

var myModule = (function(undefined) { 
    // Here you're safe from bizare third party code which might define 'undefined'. 
})(); 

在他的書中學習JavaScript設計模式,阿迪·奧斯馬尼顯示模塊模式的幾個變化:

推薦閱讀。

乾杯!

相關問題