總網頁瀏覽量

2014年4月2日 星期三

[Javascript] 開頭 ;(function ( $, window, document, undefined ){ 的意義

jquery中我們經常看到以下這段代碼:
;(function ( $, window, document, undefined ){
//函數體內具體代碼
})(jQuery, window,document);

首先說說非常值得提倡的幾點:
1
、代碼最前面的分號,可以防止多個檔案壓縮合併以為其他檔最後一行語句沒加分號,而引起合併後的語法錯誤。

2
、匿名函數(function(){})();:由於Javascript執行運算式是從圓括號裡面到外面,所以可以用圓括號強制執行聲明的函數。避免函數體內和外部的變數衝突。

3
$實參:$jquery的簡寫,很多方法和類庫也使用$,這裡$接受jQuery物件,也是為了避免$變數衝突,保證外掛程式可以正常運行。

4
window, document實參分別接受window, document物件,window, document物件都是全域環境下的,而在函數體內的window, document其實是區域變數,不是全域的window, document對象。這樣做有個好處就是可以提高性能,減少作用域鏈的查詢時間,如果你在函數體內需要多次調用window document物件,這樣把window document物件當作參數傳進去,這樣做是非常有必要的。當然你如果你的外掛程式用不到這兩個物件,那麼就不用傳遞這兩個參數了。

5
、最後剩下一個undefined形參了,那麼這個形參是幹什麼用的呢,看起來是有點多餘。undefined在老一輩的流覽器是不被支援的,直接使用會報錯,js框架要考慮到相容性,因此增加一個形參undefined

沒有留言: