我看到嵌入到以
(function(window, document, undefined){...
或
打開網頁,一些jQuery的腳本;(function ($, window, document, undefined) {...
我相信;
能在那邊如果腳本是連接在一起的其他文件,並沒有缺少一個右括號,從刪除代碼的第一行;
停止minifier,但我不知道。
與我發佈的兩個變體有什麼關係?爲什麼人們會這樣打開他們的代碼,爲什麼第一個例子會丟失美元符號?
我看到嵌入到以
(function(window, document, undefined){...
或
打開網頁,一些jQuery的腳本;(function ($, window, document, undefined) {...
我相信;
能在那邊如果腳本是連接在一起的其他文件,並沒有缺少一個右括號,從刪除代碼的第一行;
停止minifier,但我不知道。
與我發佈的兩個變體有什麼關係?爲什麼人們會這樣打開他們的代碼,爲什麼第一個例子會丟失美元符號?
這些都是爲儘可能預測腳本創建環境的包裝器。
在腳本,你將看到函數表達式右括號,並在在函數簽名中定義的參數值發送函數直接調用的末尾:
(function($, window, document, undefined){
...
})(jQuery, window, document);
如果您使用jQuery,你將包括$
參數,否則不包含。 (或者如果您沒有考慮包含它)。
如您所見,名爲undefined
的參數沒有任何值。如果您未傳遞參數值,則會將其設置爲值undefined
,因此在功能塊內,名爲undefined
的參數的值將爲undefined
。這樣做的目的是因爲全球標識符undefined
直到最近版本的Javascript纔是常量,所以在較舊的瀏覽器中,您可以給屬性undefined
一個值,以便它不再代表undefined
。 (請注意,沒有定義值的參數將獲得實際值undefined
,而不是全局屬性undefined
的當前值。)
如您所懷疑的,開頭的額外分號用於保護腳本免受其他腳本它可能會合並。
可能是因爲在第一種情況下,'jQuery'沒有作爲參數傳遞給函數。這完全取決於編寫代碼的人。至於分號:http://stackoverflow.com/questions/1031718/what-is-the-consequence-of-this-bit-of-javascript。 – 2013-02-22 17:59:15