javascript自執行函數,javascript函數

來源:互聯網
上載者:User

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'也是因為這個原因。

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的協助,同時也希望多多支援幫客之家!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.