240 發(fā)簡信
IP屬地:吉林
  • 簡單來說骇扇,假設函數(shù)A在函數(shù)B的內(nèi)部進行定義了欢伏,并且當函數(shù)A在執(zhí)行時抹沪,訪問了函數(shù)B內(nèi)部的變量對象肉渴,那么B就是一個閉包铜靶。

    這個解釋不準確颊郎。簡而言之閉包就是運行時能訪問另外一個函數(shù)內(nèi)的變量的函數(shù)憋飞。例如:function A(){ var a="aa"; return function B(){alert(a)}}; funcA = A()。A和B都不算是閉包姆吭,A和B組合成構造了閉包環(huán)境榛做,真正的閉包是funcA。即A函數(shù)包變量a封閉起來了内狸,外面無法訪問检眯,但是提供了一個包B函數(shù)可以訪問。A和B一閉一包昆淡。上面那句話可以解釋為: 閉包就是運行時(funcA())能訪問另外一個函數(shù)(A)內(nèi)的變量(a)的函數(shù)(funcA)锰瘸。

  • 我覺得作用域鏈應該是當前執(zhí)行上下文的變量對象和上層環(huán)境的活動對象的集合,因為內(nèi)部函數(shù)被激活時昂灵,外部函數(shù)已經(jīng)開始執(zhí)行了避凝,此時外部函數(shù)得變量對象已經(jīng)是活動對象了!不知道是否可以這么理解U2埂管削?

  • 思考了很久含思。我認為閉包是被動的,而真正的閉包是外部函數(shù)而不是內(nèi)部函數(shù)。
    首先理解一個,當函數(shù)被聲明時其實已經(jīng)對函數(shù)中的變量進行了訪問含潘。如function fn1(){return a},此時外部函數(shù)foo中的a=10就被訪問了饲做,只是fn1()沒有執(zhí)行,所以不會return,但從chrome設置斷點看此時(fn2()被調用前)fn1中的a的值已經(jīng)是10了遏弱。
    回歸正題艇炎,當任一內(nèi)部函數(shù)(如fn1,fn2,fn3....)對外部函數(shù)(如foo)的變量對象進行訪問時,外部函數(shù)“被動”成為閉包腾窝,成為閉包后所有內(nèi)部函數(shù)都擁有外部函數(shù)的變量對象的“顯式”索引缀踪,為什么說是顯式的,難道還有隱式的虹脯?是的驴娃,因為內(nèi)部函數(shù)本身就對外部函數(shù)的變量對象有訪問權(理解為隱式索引)。那么顯式索引是干嘛的循集?答案:是為了對抗垃圾回收機制唇敞。
    這樣就可以解釋demo7中為什么fn1存在時形成閉包,不存在時不形成閉包了咒彤。因為fn1聲明時對外部變量對象進行了訪問疆柔。
    綜上所述:閉包與不閉包決定了當垃圾回收機制來臨時會做何處理。

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

    大家好,我是用時間釀酒醋火。 寫文不到2年悠汽,已出版1本書,第二本上個月剛剛簽約完稿芥驳。 全文近8000多字柿冲,滿滿的干貨,同時為了降低大家的閱讀壓力兆旬,所有重點內(nèi)容已加粗處理假抄。 大家可...

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