標籤:使用 html 瀏覽器 修改 執行 java alert 為什麼 變數
(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
Js代碼:
- //方式一
- (function(undefined ) {
- window.property1 = ……;
- window.property2 = ……;
- ……
- })();
- //方式二
- (function( window, undefined ) {
- ... // code goes here
-
- })(window);
- //方式三
- (function(undefined ) {
- var tmp = window;
- tmp.property1 = ……;
- tmp.property2 = ……;
- ……
- })();
方式一的效率明顯最低,方式二和方式三應該差不多。將window作為參數傳遞進去就可以讓代碼裡面的語句可以直接用參數中的window,而不用再去找最外層的對象。假如要在函數中為window再設定 100000個屬性,用參數傳遞過去只需要找一次最外層對象。不用參數傳遞,用到window的語句都要去找一次最外層對象。
function ($, undefined){ })(jQuery) 規避使用者對undefined進行定義,致使函數發生異常 (function ($, undefined){ })(jQuery)如果使用者 var undefined =xiaoyan;(function ($, undefined){ })(jQuery) //這裡就可以傳個undefined的形參,避免上面的定義,只要沒傳值進去,undefined就不會被賦值
jquery源碼中的(function(window, undefined){})(window)【轉】