亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

js閉包所用的場(chǎng)合以及優(yōu)缺點(diǎn)分析

 更新時(shí)間:2015年06月22日 09:48:34   投稿:hebedich  
這篇文章主要介紹了js閉包所用的場(chǎng)合以及優(yōu)缺點(diǎn)分析,十分的詳細(xì)使用,有需要的小伙伴可以參考下。

先上段代碼:

//函數(shù)a
function a()
{
var i=0;
//函數(shù)b
function b()
{
alert(++i);
}
return b;
}
//函數(shù)c
var c = a();
c();

代碼特點(diǎn):

1、函數(shù)b嵌套在函數(shù)a內(nèi)部;
2、函數(shù)a返回函數(shù)b。
代碼中函數(shù)a的內(nèi)部函數(shù)b,被函數(shù)a外面的一個(gè)變量c引用的時(shí)候,這就叫創(chuàng)建了一個(gè)閉包。有時(shí)候函數(shù)b也可以用一個(gè)匿名函數(shù)代替來(lái)返回,即return function(){};

優(yōu)點(diǎn):1.保護(hù)函數(shù)內(nèi)的變量安全,加強(qiáng)了封裝性 2.在內(nèi)存中維持一個(gè)變量(用的太多就變成了缺點(diǎn),占內(nèi)存)
閉包之所以會(huì)占用資源是當(dāng)函數(shù)a執(zhí)行結(jié)束后, 變量i不會(huì)因?yàn)楹瘮?shù)a的結(jié)束而銷毀, 因?yàn)閎的執(zhí)行需要依賴a中的變量。
不適合場(chǎng)景:返回閉包的函數(shù)是個(gè)非常大的函數(shù)

閉包的典型框架應(yīng)該就是jquery了。

閉包是javascript語(yǔ)言的一大特點(diǎn),主要應(yīng)用閉包場(chǎng)合主要是為了:設(shè)計(jì)私有的方法和變量。
這在做框架的時(shí)候體現(xiàn)更明顯,有些方法和屬性只是運(yùn)算邏輯過(guò)程中的使用的,不想讓外部修改這些屬性,因此就可以設(shè)計(jì)一個(gè)閉包來(lái)只提供方法獲取。

閉包的缺點(diǎn)就是常駐內(nèi)存,會(huì)增大內(nèi)存使用量,使用不當(dāng)很容易造成內(nèi)存泄露。

總結(jié)一下:

優(yōu)點(diǎn):

1. 邏輯連續(xù),當(dāng)閉包作為另一個(gè)函數(shù)調(diào)用的參數(shù)時(shí),避免你脫離當(dāng)前邏輯而單獨(dú)編寫額外邏輯。
2. 方便調(diào)用上下文的局部變量。
3. 加強(qiáng)封裝性,第2點(diǎn)的延伸,可以達(dá)到對(duì)變量的保護(hù)作用。

缺點(diǎn):

閉包有一個(gè)非常嚴(yán)重的問(wèn)題,那就是內(nèi)存浪費(fèi)問(wèn)題,這個(gè)內(nèi)存浪費(fèi)不僅僅因?yàn)樗qv內(nèi)存,更重要的是,對(duì)閉包的使用不當(dāng)會(huì)造成無(wú)效內(nèi)存的產(chǎn)生,看下面的例子:

var array = [];
function abc() {
var foo = function(){
}
array.push(foo);
return foo;
}
for(var i = 0 ; i < 10000; i ++)
{
abc();
}

alert(array[0] == array[1]);

通過(guò)上面的測(cè)試我們會(huì)看到這一萬(wàn)次abc()執(zhí)行所產(chǎn)生的同一個(gè)邏輯的閉包的地址并不相同,也就是說(shuō)它生產(chǎn)了一堆的一模一樣的Function對(duì)象,這樣有好處就是可以以工廠模式產(chǎn)生函數(shù)以備使用,然而如果你的稍有不慎將閉包當(dāng)做常態(tài)邏輯使用,就不可避免的會(huì)造成內(nèi)存垃圾。當(dāng)中換個(gè)語(yǔ)法可能更好理解:

var foo = new Function();

所以關(guān)于閉包,就我自己的習(xí)慣而言,能不用就不用,如果非用不可,那就想辦法保持閉包對(duì)象的數(shù)量很少甚至唯一。

以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。

相關(guān)文章

  • JS利用map整合雙數(shù)組的小技巧分享

    JS利用map整合雙數(shù)組的小技巧分享

    Map是一組鍵值對(duì)的結(jié)構(gòu),具有極快的查找速度,下面這篇文章主要給大家介紹了關(guān)于JS利用map整合雙數(shù)組的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-08-08
  • JavaScript 通過(guò)Ajax 動(dòng)態(tài)加載CheckBox復(fù)選框

    JavaScript 通過(guò)Ajax 動(dòng)態(tài)加載CheckBox復(fù)選框

    本文通過(guò)實(shí)例代碼給大家介紹了JavaScript 通過(guò)Ajax 動(dòng)態(tài)加載CheckBox復(fù)選框的方法,需要的朋友參考下吧
    2017-08-08
  • wufengteam?core統(tǒng)一中心注冊(cè)器功能解析

    wufengteam?core統(tǒng)一中心注冊(cè)器功能解析

    這篇文章主要為大家介紹了wufengteam?core統(tǒng)一中心注冊(cè)器功能解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • JavaScript正則表達(dá)式函數(shù)總結(jié)(常用)

    JavaScript正則表達(dá)式函數(shù)總結(jié)(常用)

    正則表達(dá)式作為一種匹配處理字符串的利器在很多語(yǔ)言中都得到了廣泛實(shí)現(xiàn)和應(yīng)用.這篇文章主要介紹了JavaScript正則表達(dá)式函數(shù)總結(jié),需要的朋友可以參考下
    2018-02-02
  • JS上傳前預(yù)覽圖片實(shí)例

    JS上傳前預(yù)覽圖片實(shí)例

    上傳圖片對(duì)圖片進(jìn)行一下預(yù)覽,可以了解圖片上傳后大概會(huì)是什么樣子,此功能用js實(shí)現(xiàn),然后在fileupload控件的change事件中調(diào)用,這樣當(dāng)用fileupload選擇完圖片以后,圖片就會(huì)自動(dòng)顯示出來(lái)了。功能很簡(jiǎn)單,卻很實(shí)用。
    2013-03-03
  • mui js控制開關(guān)狀態(tài)、修改switch開關(guān)的值方法

    mui js控制開關(guān)狀態(tài)、修改switch開關(guān)的值方法

    今天小編就為大家分享一篇mui js控制開關(guān)狀態(tài)、修改switch開關(guān)的值方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-09-09
  • JS判定是否原生方法

    JS判定是否原生方法

    這篇文章介紹了js判定是否原生方法,有需要的朋友可以參考一下
    2013-07-07
  • js實(shí)現(xiàn)純前端壓縮圖片

    js實(shí)現(xiàn)純前端壓縮圖片

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)純前端壓縮圖片,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • JavaScript操作元素教你改變頁(yè)面內(nèi)容樣式

    JavaScript操作元素教你改變頁(yè)面內(nèi)容樣式

    這篇文章主要為大家介紹了JavaScript操作元素,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-11-11
  • 騰訊的ip接口 方便獲取當(dāng)前用戶的ip地理位置

    騰訊的ip接口 方便獲取當(dāng)前用戶的ip地理位置

    在論壇中閑逛,無(wú)意中發(fā)現(xiàn)騰訊的ip接口。還是挺有意思的。大家可以利用下,這個(gè)IP接口所查詢到的還是比較準(zhǔn)確,我發(fā)給幾個(gè)朋友測(cè)試了一下都是正確的,畢竟是騰訊的東西。
    2010-11-11

最新評(píng)論