JS 關於(function( window, undefined ) {})(window)寫法的理解【轉】

來源:互聯網
上載者:User

標籤:

JS 關於(function( window, undefined ) {})(window)寫法的理解 [網路整理]

(function( window, undefined ) {})(window);這個,為什麼要將window和undefined作為參數傳給它?(function( $, undefined ) {})(jQuery); 同理因為 ecmascript 執行JS代碼是從裡到外,因此把全域變數window或jQuery對象傳進來,就避免了到外層去尋找,提高效率。undefined在老一輩的瀏覽器是不被支援的,直接使用會報錯,js架構要考慮到相容性,因此增加一個形參undefined。還有,不要用window.undefined傳遞給形參,有可能window.undefined被其他人修改了,最好就是甚麼都不傳,形參的undefined就是真正的undefined了。Js代碼 : var undefined = 8;  (function( window ) {       alert(window.undefined); // 8      alert(undefined); // 8  })(window);   與Js代碼 : var undefined = 8;  (function( window, undefined ) {       alert(window.undefined);  // 8      alert(undefined); // 此處undefined參數為局部的名稱為undefined變數,值為undefined  })(window);  區分上述兩種方式:第一種每個語句都要去找一次window。第二種將window作為參數傳遞過去,是的不要每個語句都去找window,應該是提高了效率。 所以後者,就算外面的人把 undefined 定義了,裡面的 undefined 依然不受影響。大概是為了最大程度防止外界的變數定義對所做封裝的內部造成影響吧。 原文參考自站長網http://www.software8.co/wzjs/Javascript/2525.html   

在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

JS 關於(function( window, undefined ) {})(window)寫法的理解【轉】

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.