閉包

var a=function(){var i=0;return function(){return i++}};
var bb=a();
bb();//0
bb();//1
bb();//2
image.png

如圖所示,紅色為a,黃色為b,紫色為c。

在b中,函數(shù)c為返回值,bb=a()中,bb得到的返回值其實(shí)是一個(gè)函數(shù),則bb()執(zhí)行的時(shí)候,執(zhí)行的是函數(shù)c的值,bb=a()時(shí),產(chǎn)生b的活動(dòng)對(duì)象,bb()執(zhí)行的時(shí)候,產(chǎn)生一個(gè)c的活動(dòng)對(duì)象,加上全局的一個(gè)活動(dòng)對(duì)象,此時(shí),有三個(gè)活動(dòng)對(duì)象存在,所以bb()執(zhí)行的時(shí)候,i并未被回收。

閉包其實(shí)實(shí)質(zhì)上是阻斷了js的垃圾回收機(jī)制,
js的垃圾回收在兩個(gè)地方執(zhí)行,一是函數(shù)運(yùn)行之后回收,二是隔一段時(shí)間檢查是否有需要待回收的垃圾。

所以,若要使閉包被回收,則將bb=null即可。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 閉包: 官方”的解釋是:閉包是一個(gè)擁有許多變量和綁定了這些變量的環(huán)境的表達(dá)式(通常是一個(gè)函數(shù)),因而這些變量也是該...
    小裁縫sun閱讀 711評(píng)論 0 5
  • 談起閉包,它可是JavaScript兩個(gè)核心技術(shù)之一(異步和閉包),在面試以及實(shí)際應(yīng)用當(dāng)中,我們都離不開它們,甚至...
    sponing閱讀 775評(píng)論 0 7
  • 閉包(closure)是Javascript語言的一個(gè)難點(diǎn),也是它的特色,很多高級(jí)應(yīng)用都要依靠閉包實(shí)現(xiàn)。 一、變量...
    zouCode閱讀 1,361評(píng)論 0 13
  • 閉包(closure)是Javascript語言的一個(gè)難點(diǎn),也是它的特色,很多高級(jí)應(yīng)用都要依靠閉包實(shí)現(xiàn)。 一、變量...
    zock閱讀 1,118評(píng)論 2 6
  • 自動(dòng)計(jì)算Text高度: ASTableNode: ASCellNode: 點(diǎn)擊Cell展開
    魚得琴閱讀 862評(píng)論 1 51

友情鏈接更多精彩內(nèi)容