溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

javascript中怎么自執(zhí)行函數(shù)

發(fā)布時(shí)間:2021-07-14 16:36:42 來(lái)源:億速云 閱讀:109 作者:Leah 欄目:web開(kāi)發(fā)

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)javascript中怎么自執(zhí)行函數(shù),文章內(nèi)容豐富且以專(zhuān)業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

function (window, $, undefined) {
 play=function(){
  $("#demo").val("This is a demo.");
 }
 window.wbLogin = play;
})(window, jQuery);

像上邊這樣的代碼為什么要把window, jQuery對(duì)象傳進(jìn)去?

為什么要傳入 jQuery?

通過(guò)定義一個(gè)匿名函數(shù),創(chuàng)建了一個(gè)“私有”的命名空間,該命名空間的變量和方法,不會(huì)破壞全局的命名空間。這點(diǎn)非常有用也是一個(gè) JS 框架必須支持的功能,jQuery 被應(yīng)用在成千上萬(wàn)的 JavaScript 程序中,必須確保 jQuery 創(chuàng)建的變量不能和導(dǎo)入他的程序所使用的變量發(fā)生沖突。

為什么要傳入 window?

通過(guò)傳入 window 變量,使得 window 由全局變量變?yōu)榫植孔兞?,?dāng)在 jQuery 代碼塊中訪問(wèn) window 時(shí),不需要將作用域鏈回退到頂層作用域,這樣可以更快的訪問(wèn) 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 能夠被重寫(xiě),賦予新的值。

一句話,使全局變量以參數(shù)形式變成自執(zhí)行函數(shù)內(nèi)部的局部變量。

至于為什么這么做,提高程序效率。為什么能提高效率,得從javascript的機(jī)制說(shuō)起,所謂的scope chain作用域鏈,在當(dāng)前作用域中如果沒(méi)有該屬性(局部變量)則向上一層作用域中尋找,一直到最上層,也就是window。也就是說(shuō)全局變量和下級(jí)作用域都是window的一個(gè)屬性,向下依此類(lèi)推。

另外jQuery傳入后將參數(shù)寫(xiě)成$可以保證在此函數(shù)內(nèi)$為jquery而不是其他類(lèi)似使用$符號(hào)的庫(kù)。

undefined同理,由于沒(méi)有傳入第三個(gè)參數(shù),自然就是undefined。由于javascript中undefined是一個(gè)變量,可以被改變,所以這樣可以保證undefined判斷時(shí)的準(zhǔn)確性。有時(shí)判斷時(shí)使用typeof xxx === 'undefined'也是因?yàn)檫@個(gè)原因。

上述就是小編為大家分享的javascript中怎么自執(zhí)行函數(shù)了,如果剛好有類(lèi)似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI