javascript自執(zhí)行函數(shù)
function (window, $, undefined) {
play=function(){
$("#demo").val("This is a demo.");
}
window.wbLogin = play;
})(window, jQuery);
像上邊這樣的代碼為什么要把window, jQuery對(duì)象傳進(jìn)去?
為什么要傳入 jQuery?
通過定義一個(gè)匿名函數(shù),創(chuàng)建了一個(gè)“私有”的命名空間,該命名空間的變量和方法,不會(huì)破壞全局的命名空間。這點(diǎn)非常有用也是一個(gè) JS 框架必須支持的功能,jQuery 被應(yīng)用在成千上萬的 JavaScript 程序中,必須確保 jQuery 創(chuàng)建的變量不能和導(dǎo)入他的程序所使用的變量發(fā)生沖突。
為什么要傳入 window?
通過傳入 window 變量,使得 window 由全局變量變?yōu)榫植孔兞?,?dāng)在 jQuery 代碼塊中訪問 window 時(shí),不需要將作用域鏈回退到頂層作用域,這樣可以更快的訪問 window;這還不是關(guān)鍵所在,更重要的是,將 window 作為參數(shù)傳入,可以在壓縮代碼時(shí)進(jìn)行優(yōu)化,看看 jquery-1.6.1.min.js:
(function(a,b){})(window); // window 被優(yōu)化為 a
為什么要傳入 undefined?
在自調(diào)用匿名函數(shù)的作用域內(nèi),確保 undefined 是真的未定義。因?yàn)?undefined 能夠被重寫,賦予新的值。
一句話,使全局變量以參數(shù)形式變成自執(zhí)行函數(shù)內(nèi)部的局部變量。
至于為什么這么做,提高程序效率。為什么能提高效率,得從javascript的機(jī)制說起,所謂的scope chain作用域鏈,在當(dāng)前作用域中如果沒有該屬性(局部變量)則向上一層作用域中尋找,一直到最上層,也就是window。也就是說全局變量和下級(jí)作用域都是window的一個(gè)屬性,向下依此類推。
另外jQuery傳入后將參數(shù)寫成$可以保證在此函數(shù)內(nèi)$為jquery而不是其他類似使用$符號(hào)的庫(kù)。
undefined同理,由于沒有傳入第三個(gè)參數(shù),自然就是undefined。由于javascript中undefined是一個(gè)變量,可以被改變,所以這樣可以保證undefined判斷時(shí)的準(zhǔn)確性。有時(shí)判斷時(shí)使用typeof xxx === 'undefined'也是因?yàn)檫@個(gè)原因。
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!
相關(guān)文章
axios對(duì)外出口API的設(shè)計(jì)方法
本文我們講解了 axios 對(duì)外出口 API 是如何設(shè)計(jì)的,我們首先介紹了內(nèi)部 Axios 類的實(shí)現(xiàn),這是 axios 核心邏輯所在,其次為了讓出口 API 更好使用,最后又在增加了 create() 方法,文中通過代碼示例講解的非常詳細(xì),需要的朋友可以參考下2024-05-05
js控制不同的時(shí)間段顯示不同的css樣式的實(shí)例代碼
這篇文章介紹了js控制不同的時(shí)間段顯示不同的css樣式的實(shí)例代碼,有需要的朋友可以參考一下2013-11-11
JavaScript安全加密之禁止別人調(diào)試自己的前端頁(yè)面代碼實(shí)現(xiàn)
這篇文章主要為大家介紹了JavaScript安全加密之如何禁止別人調(diào)試自己的前端頁(yè)面代碼實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
JavaScript實(shí)現(xiàn)星級(jí)評(píng)價(jià)效果
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)星級(jí)評(píng)價(jià)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05
JS根據(jù)年月獲得當(dāng)月天數(shù)的實(shí)現(xiàn)代碼
這篇文章主要介紹了JS根據(jù)年月獲得當(dāng)月天數(shù)的實(shí)現(xiàn)代碼,需要的朋友可以參考下2014-07-07
js Firefox 加入收藏夾功能代碼 兼容Firefox 和 IE
最近改用Firefox后,發(fā)現(xiàn)很多網(wǎng)站的“加入收藏”鏈接點(diǎn)擊無效了,后來發(fā)現(xiàn)原來是IE瀏覽器和Firefox瀏覽器的“加入收藏夾”的寫法是不同的。2009-12-12
JavaScript實(shí)現(xiàn)的石頭剪刀布游戲源碼分享
這篇文章主要介紹了JavaScript實(shí)現(xiàn)的石頭剪刀布游戲源碼分享,挺好玩的小游戲,關(guān)鍵在一些算法上,需要的朋友可以參考下2014-08-08
javascript筆試題目附答案@20081025_jb51.net
網(wǎng)上找的javascript筆試題目,留檔給自己作參考。2008-10-10

