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


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代碼 : 
  1. var undefined = 8;  
  2. (function( window ) {   
  3.     alert(window.undefined); // 8  
  4.     alert(undefined); // 8  
  5. })(window);  

 

Js代碼 : 
  1. var undefined = 8;  
  2. (function( window, undefined ) {   
  3.     alert(window.undefined);  // 8  
  4.     alert(undefined); // 此處undefined參數為局部的名稱為undefined變量,值為undefined  
  5. })(window);  

區分上述兩種方式:第一種每個語句都要去找一次window。第二種將window作為參數傳遞過去,是的不要每個語句都去找window,應該是提高了效率。 所以后者,就算外面的人把 undefined 定義了,里面的 undefined 依然不受影響。大概是為了最大程度防止外界的變量定義對所做封裝的內部造成影響吧。

 原文參考自站長網http://www.software8.co/wzjs/Javascript/2525.html

Js代碼:  
  1. //方式一  
  2. (function(undefined ) {  
  3.    window.property1 = ……;  
  4.    window.property2 = ……;  
  5.    ……  
  6. })();  
  7. //方式二  
  8. (function( window, undefined ) {  
  9.     ... // code goes here  
  10.   
  11. })(window);  
  12. //方式三  
  13. (function(undefined ) {  
  14.    var tmp = window;  
  15.    tmp.property1 = ……;  
  16.    tmp.property2 = ……;  
  17.    ……  
  18. })();  

方式一的效率明顯最低,方式二和方式三應該差不多。將window作為參數傳遞進去就可以讓代碼里面的語句可以直接用參數中的window,而不用再去找最外層的對象。假如要在函數中為window再設置 100000個屬性,用參數傳遞過去只需要找一次最外層對象。不用參數傳遞,用到window的語句都要去找一次最外層對象。

 

 

function ($, undefined){ })(jQuery)

 
規避用戶對undefined進行定義,致使函數發生異常
 
(function ($, undefined){ })(jQuery)
如果用戶
 
var undefined =xiaoyan;
(function ($, undefined){ })(jQuery) //這里就可以傳個undefined的形參,避免上面的定義,只要沒傳值進去,undefined就不會被賦值


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM