2013-03-19 49 views
0

嗨我是新來的JavaScript和我想維護someones代碼,但我似乎無法弄清楚他們在做什麼。Javascript怪異的方式聲明和調用函數

他們似乎聲明一個函數,像這樣:

(function(Module) { 
    Module.register(...) { 
     .... 
     return ...; 
    }; 
    Module.register(...) { 
     .... 
     return ...; 
    }; 
}(hb.Core)); 

如果你想創建一個調用Module.register兩倍(這是我認爲他們正在嘗試做的)功能,不會你做以下?

function myFunction(Module) { 
    Module.register(...) { 
     ... 
    }; 
    Module.register(...) { 
     ... 
    }; 
} 
myfunction(Module); 

而且,不知道這是不是真的有關,但他們使用的沙箱模型(他們有不同的模塊只有通過沙箱與應用程序的核心通信)。

希望有人可以幫忙。我對Javascript和前端開發非常陌生,我非常困惑。

+0

從你向我們展示了什麼,第一部分看起來像一個錯誤。 – 2013-03-19 17:58:36

+0

你看過http://stackoverflow.com/questions/1140089/how-does-an-anonymous-function-in-javascript-work – sircapsalot 2013-03-19 17:58:47

+2

通過將函數包裝在圓括號中,創建了一個函數表達式,它不污染全球範圍。 – Shmiddty 2013-03-19 17:58:51

回答

2

重複What is the purpose of a self executing function in javascript?

它執行的匿名函數調用的自我。你的例子是一個函數聲明,你已經爲函數指定了一個名字,所以它不再是匿名的。當需要將變量的範圍限制爲只對自執行函數中的任何內容可用時,就使用自執行函數。

+0

謝謝!我以爲那是做什麼,但不是太確定 – user2158382 2013-03-19 19:20:07

+0

高興地幫助:) – iAmClownShoe 2013-03-19 19:22:35

0

如果你的意思是功能

(function(Module) {}(hb.Core)); 

這是自調用函數接收其Module參數hb.Core值。 在JavaScript函數聲明範圍,所以這是上面的主要原因。

該函數內部變量是不是它的訪問之外,這意味着在它之外的範圍