2013-02-22 28 views
5

我看到嵌入到以

(function(window, document, undefined){... 

打開網頁,一些jQuery的腳本
;(function ($, window, document, undefined) {... 

我相信;能在那邊如果腳本是連接在一起的其他文件,並沒有缺少一個右括號,從刪除代碼的第一行;停止minifier,但我不知道。

與我發佈的兩個變體有什麼關係?爲什麼人們會這樣打開他們的代碼,爲什麼第一個例子會丟失美元符號?

+4

可能是因爲在第一種情況下,'jQuery'沒有作爲參數傳遞給函數。這完全取決於編寫代碼的人。至於分號:http://stackoverflow.com/questions/1031718/what-is-the-consequence-of-this-bit-of-javascript。 – 2013-02-22 17:59:15

回答

5

這些都是爲儘可能預測腳本創建環境的包裝器。

在腳本,你將看到函數表達式右括號,並在在函數簽名中定義的參數值發送函數直接調用的末尾:

(function($, window, document, undefined){ 
... 
})(jQuery, window, document); 

如果您使用jQuery,你將包括$參數,否則不包含。 (或者如果您沒有考慮包含它)。

如您所見,名爲undefined的參數沒有任何值。如果您未傳遞參數值,則會將其設置爲值undefined,因此在功能塊內,名爲undefined的參數的值將爲undefined。這樣做的目的是因爲全球標識符undefined直到最近版本的Javascript纔是常量,所以在較舊的瀏覽器中,您可以給屬性undefined一個值,以便它不再代表undefined。 (請注意,沒有定義值的參數將獲得實際值undefined,而不是全局屬性undefined的當前值。)

如您所懷疑的,開頭的額外分號用於保護腳本免受其他腳本它可能會合並。