240 發(fā)簡(jiǎn)信
IP屬地:吉林
  • 簡(jiǎn)單來說亏拉,假設(shè)函數(shù)A在函數(shù)B的內(nèi)部進(jìn)行定義了仔沿,并且當(dāng)函數(shù)A在執(zhí)行時(shí)坐桩,訪問了函數(shù)B內(nèi)部的變量對(duì)象,那么B就是一個(gè)閉包封锉。

    這個(gè)解釋不準(zhǔn)確绵跷。簡(jiǎn)而言之閉包就是運(yùn)行時(shí)能訪問另外一個(gè)函數(shù)內(nèi)的變量的函數(shù)。例如:function A(){ var a="aa"; return function B(){alert(a)}}; funcA = A()成福。A和B都不算是閉包碾局,A和B組合成構(gòu)造了閉包環(huán)境,真正的閉包是funcA奴艾。即A函數(shù)包變量a封閉起來了净当,外面無法訪問,但是提供了一個(gè)包B函數(shù)可以訪問蕴潦。A和B一閉一包像啼。上面那句話可以解釋為: 閉包就是運(yùn)行時(shí)(funcA())能訪問另外一個(gè)函數(shù)(A)內(nèi)的變量(a)的函數(shù)(funcA)。

  • 我覺得作用域鏈應(yīng)該是當(dāng)前執(zhí)行上下文的變量對(duì)象和上層環(huán)境的活動(dòng)對(duì)象的集合潭苞,因?yàn)閮?nèi)部函數(shù)被激活時(shí)忽冻,外部函數(shù)已經(jīng)開始執(zhí)行了,此時(shí)外部函數(shù)得變量對(duì)象已經(jīng)是活動(dòng)對(duì)象了此疹!不知道是否可以這么理解I稀?

  • 思考了很久。我認(rèn)為閉包是被動(dòng)的,而真正的閉包是外部函數(shù)而不是內(nèi)部函數(shù)衍菱。
    首先理解一個(gè),當(dāng)函數(shù)被聲明時(shí)其實(shí)已經(jīng)對(duì)函數(shù)中的變量進(jìn)行了訪問肩豁。如function fn1(){return a},此時(shí)外部函數(shù)foo中的a=10就被訪問了脊串,只是fn1()沒有執(zhí)行,所以不會(huì)return,但從chrome設(shè)置斷點(diǎn)看此時(shí)(fn2()被調(diào)用前)fn1中的a的值已經(jīng)是10了清钥。
    回歸正題琼锋,當(dāng)任一內(nèi)部函數(shù)(如fn1,fn2,fn3....)對(duì)外部函數(shù)(如foo)的變量對(duì)象進(jìn)行訪問時(shí),外部函數(shù)“被動(dòng)”成為閉包祟昭,成為閉包后所有內(nèi)部函數(shù)都擁有外部函數(shù)的變量對(duì)象的“顯式”索引缕坎,為什么說是顯式的,難道還有隱式的篡悟?是的谜叹,因?yàn)閮?nèi)部函數(shù)本身就對(duì)外部函數(shù)的變量對(duì)象有訪問權(quán)(理解為隱式索引)匾寝。那么顯式索引是干嘛的?答案:是為了對(duì)抗垃圾回收機(jī)制荷腊。
    這樣就可以解釋demo7中為什么fn1存在時(shí)形成閉包艳悔,不存在時(shí)不形成閉包了。因?yàn)閒n1聲明時(shí)對(duì)外部變量對(duì)象進(jìn)行了訪問女仰。
    綜上所述:閉包與不閉包決定了當(dāng)垃圾回收機(jī)制來臨時(shí)會(huì)做何處理猜年。

  • 120
    分享干貨版︱如何通過寫作開啟斜杠人生,賺取寫作的第一桶金悍募?

    大家好蘑辑,我是用時(shí)間釀酒。 寫文不到2年坠宴,已出版1本書洋魂,第二本上個(gè)月剛剛簽約完稿。 全文近8000多字喜鼓,滿滿的干貨副砍,同時(shí)為了降低大家的閱讀壓力,所有重點(diǎn)內(nèi)容已加粗處理庄岖。 大家可...

亚洲A日韩AV无卡,小受高潮白浆痉挛av免费观看,成人AV无码久久久久不卡网站,国产AV日韩精品