2023-01-29 自己理解下的JS 閉包

在理解閉包前,首先要搞清楚兩個概念碉渡,作用域和作用域鏈。

一母剥、作用域
簡單理解:作用域就是變量的可用范圍(scope)滞诺。
目的:防止不同范圍內(nèi)的變量之間相互干擾。

    js中的作用域有兩種:
    1.全局作用域环疼。 
      不屬于任何函數(shù)的外部范圍习霹。
      全局變量:保存在全局作用域的變量。
      全局變量    優(yōu)點(diǎn):可反復(fù)使用炫隶。 缺點(diǎn):全局污染序愚。
    2.函數(shù)作用域。(ES6的塊級作用域?qū)嶋H上也是函數(shù)作用域) 
      在函數(shù)內(nèi)部的范圍等限。
      局部變量:保存在函數(shù)內(nèi)部的變量爸吮。  
      函數(shù)內(nèi)部的局部變量只有兩種情況:一種是函數(shù)的形參,一種是函數(shù)內(nèi)部var望门,let 聲明的變量形娇。
      局部變量  優(yōu)點(diǎn):不會被污染。缺點(diǎn):不能重復(fù)使用筹误。
      說明:只有函數(shù)的{}桐早,才能形成作用域。
      比如   對象

二、作用域鏈
簡單理解:每個函數(shù)在定義時哄酝,就已經(jīng)規(guī)劃好了自己專屬的查找變量的路線圖友存,稱為作用域鏈。
內(nèi)部作用域訪問外部作用域的變量陶衅,采取的是鏈?zhǔn)讲檎业姆绞經(jīng)Q定取哪個值屡立,原則是就近查找,向上一級一級的作用域來查找變量搀军,最頂部就是全局作用域膨俐。如果全局作用域沒有找到,那么就會報錯罩句。

三焚刺、作用域的本質(zhì):
全局作用域:其實(shí)是一個window的對象,所有的全局變量和全局函數(shù)都是window對象的成員门烂。
函數(shù)作用域:js引擎調(diào)用函數(shù)時才臨時創(chuàng)建的一個作用域?qū)ο笕橛洹@锩姹4嬷植孔兞浚?dāng)函數(shù)調(diào)用完畢后屯远,函數(shù)作用域?qū)ο箅S之也被釋放掉匾委。(函數(shù)作用域?qū)ο筮€有個別名:活動的對象 Actived Object 簡稱AO),因此局部變量不可重復(fù)使用氓润。

四、閉包
簡單理解:既可以重復(fù)使用變量薯鳍,又保護(hù)變量不被污染的一種編程方法咖气。
以后:只希望給一個函數(shù),保存一個既可以反復(fù)使用挖滤,又不被外界污染的專屬局部變量時崩溪,就用閉包。

閉包三部曲:
1.用外層函數(shù)包裹斩松,要保護(hù)的局部變量和使用變量的內(nèi)層函數(shù)伶唯。
2.在外層函數(shù)內(nèi)部,返回內(nèi)層函數(shù)對象惧盹。
3.調(diào)用外層函數(shù)乳幸,用變量借助返回的內(nèi)層函數(shù)對象。


image.png

什么是閉包:
閉包也是一個對象钧椰,就是每次調(diào)用外層函數(shù)時粹断,臨時創(chuàng)建的函數(shù)作用域?qū)ο蟆?br> 為什么外層函數(shù)的作用域?qū)ο竽芰粝聛恚驗(yàn)楸粌?nèi)層函數(shù)的作用域鏈引用著嫡霞,無法釋放瓶埋。

一句話形容閉包:外層函數(shù)調(diào)用后,外層函數(shù)的作用域?qū)ο螅粌?nèi)層函數(shù)的作用域鏈引用著养筒,無法釋放曾撤,因此形成了閉包。

缺點(diǎn):因?yàn)闊o法釋放晕粪,容易造成內(nèi)存泄漏挤悉。
解決辦法:將保存內(nèi)層函數(shù)的對象變量賦值為null。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末兵多,一起剝皮案震驚了整個濱河市尖啡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌剩膘,老刑警劉巖衅斩,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異怠褐,居然都是意外死亡畏梆,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門奈懒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來奠涌,“玉大人,你說我怎么就攤上這事磷杏×锍” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵极祸,是天一觀的道長慈格。 經(jīng)常有香客問我,道長遥金,這世上最難降的妖魔是什么浴捆? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮稿械,結(jié)果婚禮上选泻,老公的妹妹穿的比我還像新娘。我一直安慰自己美莫,他們只是感情好页眯,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著厢呵,像睡著了一般餐茵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上述吸,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天忿族,我揣著相機(jī)與錄音锣笨,去河邊找鬼。 笑死道批,一個胖子當(dāng)著我的面吹牛错英,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播隆豹,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼椭岩,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了璃赡?” 一聲冷哼從身側(cè)響起判哥,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎碉考,沒想到半個月后塌计,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡侯谁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年锌仅,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片墙贱。...
    茶點(diǎn)故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡热芹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出惨撇,到底是詐尸還是另有隱情伊脓,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布魁衙,位于F島的核電站报腔,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏纺棺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一邪狞、第九天 我趴在偏房一處隱蔽的房頂上張望祷蝌。 院中可真熱鬧,春花似錦帆卓、人聲如沸巨朦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽糊啡。三九已至,卻和暖如春吁津,著一層夾襖步出監(jiān)牢的瞬間棚蓄,已是汗流浹背堕扶。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留梭依,地道東北人稍算。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像役拴,于是被迫代替她去往敵國和親糊探。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評論 2 355