javascript自執行函數,javascript函數
function (window, $, undefined) { play=function(){ $("#demo").val("This is a demo."); } window.wbLogin = play;})(window, jQuery);
像上邊這樣的代碼為什麼要把window, jQuery對象傳進去?
為什麼要傳入 jQuery?
通過定義一個匿名函數,建立了一個“私人”的命名空間,該命名空間的變數和方法,不會破壞全域的命名空間。這點非常有用也是一個 JS 架構必須支援的功能,jQuery 被應用在成千上萬的 JavaScript 程式中,必須確保 jQuery 建立的變數不能和匯入他的程式所使用的變數發生衝突。
為什麼要傳入 window?
通過傳入 window 變數,使得 window 由全域變數變為局部變數,當在 jQuery 代碼塊中訪問 window 時,不需要將範圍鏈回退到頂層範圍,這樣可以更快的訪問 window;這還不是關鍵所在,更重要的是,將 window 作為參數傳入,可以在壓縮代碼時進行最佳化,看看 jquery-1.6.1.min.js:
(function(a,b){})(window); // window 被最佳化為 a
為什麼要傳入 undefined?
在自調用匿名函數的範圍內,確保 undefined 是真的未定義。因為 undefined 能夠被重寫,賦予新的值。
一句話,使全域變數以參數形式變成自執行函數內部的局部變數。
至於為什麼這麼做,提高程式效率。為什麼能提高效率,得從javascript的機制說起,所謂的scope chain範圍鏈,在當前範圍中如果沒有該屬性(局部變數)則向上一層範圍中尋找,一直到最上層,也就是window。也就是說全域變數和下級範圍都是window的一個屬性,向下依此類推。
另外jQuery傳入後將參數寫成$可以保證在此函數內$為jquery而不是其他類似使用$符號的庫。
undefined同理,由於沒有傳入第三個參數,自然就是undefined。由於javascript中undefined是一個變數,可以被改變,所以這樣可以保證undefined判斷時的準確性。有時判斷時使用typeof xxx === 'undefined'也是因為這個原因。
以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的協助,同時也希望多多支援幫客之家!