閉包

基本概念:

它由兩部分組成胶果。執(zhí)行上下文(代號(hào)A)匾嘱,以及在該執(zhí)行上下文中創(chuàng)建的函數(shù)(代號(hào)B)。
當(dāng)B執(zhí)行時(shí)早抠,如果訪問了A中變量對(duì)象中的值霎烙,那么閉包就會(huì)產(chǎn)生。

紅寶書中的解釋是:
指有權(quán)訪問另一個(gè)函數(shù)作用域中變量的函數(shù),即指的是B悬垃。
但在chrome中的closure指的是A游昼。

但其實(shí)主要的是閉包是有A和B構(gòu)成的,兩者只是在稱呼上有所區(qū)別尝蠕。

原理

在調(diào)用一個(gè)函數(shù)時(shí)烘豌,會(huì)為這個(gè)函數(shù)創(chuàng)建一個(gè)執(zhí)行上下文,并創(chuàng)建一個(gè)作用域鏈看彼。
外部函數(shù)的活動(dòng)對(duì)象是內(nèi)部函數(shù)的作用域鏈上的第二個(gè)活動(dòng)對(duì)象廊佩,向外延伸,直至全局執(zhí)行上下文闲昭。
函數(shù)執(zhí)行完畢后罐寨,局部活動(dòng)對(duì)象會(huì)被銷毀。
但閉包不同序矩,內(nèi)部函數(shù)會(huì)把其包含的外部活動(dòng)對(duì)象添加到自己的作用域鏈中鸯绿,所以當(dāng)外部函數(shù)執(zhí)行完成后,其執(zhí)行上下文的作用域會(huì)被銷毀簸淀,但被內(nèi)部函數(shù)引用的活動(dòng)對(duì)象然后會(huì)被保留瓶蝴。
除非內(nèi)部函數(shù)被銷毀了,其引用的活動(dòng)對(duì)象才會(huì)被銷毀租幕。

這也就形成了閉包舷手。

場(chǎng)景

閉包的場(chǎng)景隨處可見,ajax的回調(diào)劲绪,事件的回調(diào)男窟,定時(shí)器,或者一個(gè)函數(shù)內(nèi)部返回一個(gè)另一個(gè)匿名函數(shù)等等

作用

通過閉包贾富,在其他的執(zhí)行上下文中歉眷,訪問到函數(shù)的內(nèi)部變量。

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

  • 形成私有變量颤枪,形成封裝
  • 模塊化開發(fā)汗捡,防止全局污染。
  • 用于緩存畏纲,因?yàn)楸3至藢?duì)變量的持久引用

缺點(diǎn):
但過度使用閉包會(huì)有內(nèi)存溢出的風(fēng)險(xiǎn),這是因?yàn)锽作用域內(nèi)的引用了A作用域中的變量扇住,導(dǎo)致A執(zhí)行完后,不能清除作用域盗胀,保持了對(duì)內(nèi)存的占用艘蹋。所以過度使用,是存在風(fēng)險(xiǎn)的票灰。


參考
《JavaScript高級(jí)程序設(shè)計(jì)》
前端基礎(chǔ)進(jìn)階(五):閉包
JavaScript中閉包的概念簿训、原理咱娶、作用及應(yīng)用
當(dāng)面試官問你閉包時(shí),他究竟想聽到些什么强品?
Javascript 閉包并非魔法

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市屈糊,隨后出現(xiàn)的幾起案子的榛,更是在濱河造成了極大的恐慌,老刑警劉巖逻锐,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件夫晌,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡昧诱,警方通過查閱死者的電腦和手機(jī)晓淀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盏档,“玉大人凶掰,你說我怎么就攤上這事◎谀叮” “怎么了懦窘?”我有些...
    開封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長稚配。 經(jīng)常有香客問我畅涂,道長,這世上最難降的妖魔是什么道川? 我笑而不...
    開封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任午衰,我火速辦了婚禮,結(jié)果婚禮上冒萄,老公的妹妹穿的比我還像新娘臊岸。我一直安慰自己,他們只是感情好宦言,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開白布扇单。 她就那樣靜靜地躺著,像睡著了一般奠旺。 火紅的嫁衣襯著肌膚如雪蜘澜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天响疚,我揣著相機(jī)與錄音鄙信,去河邊找鬼。 笑死忿晕,一個(gè)胖子當(dāng)著我的面吹牛装诡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼鸦采,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼宾巍!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起渔伯,我...
    開封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤顶霞,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后锣吼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體选浑,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年玄叠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了古徒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡读恃,死狀恐怖隧膘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情狐粱,我是刑警寧澤舀寓,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站肌蜻,受9級(jí)特大地震影響互墓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蒋搜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一篡撵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧豆挽,春花似錦育谬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至娘侍,卻和暖如春咖刃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背憾筏。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來泰國打工嚎杨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人氧腰。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓枫浙,卻偏偏與公主長得像刨肃,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子箩帚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 一膏潮、閉包的定義 閉包是指有權(quán)訪問另一個(gè)函數(shù)作用域中的變量的函數(shù) --《JavaScript高級(jí)程序設(shè)計(jì)》 函數(shù)對(duì)象...
    沐向閱讀 344評(píng)論 0 0
  • 什么是閉包锻狗? 閉包是指那些能夠訪問自由變量的函數(shù)。自由變量:指在函數(shù)中使用的焕参,但既不是函數(shù)參數(shù)也不是函數(shù)的局部變量...
    BubbleM閱讀 296評(píng)論 0 1
  • 前言 面試問題: 說一下對(duì)變量提升的理解 說明this的幾種不同的使用場(chǎng)景 創(chuàng)建10個(gè) 標(biāo)簽,點(diǎn)擊的時(shí)候彈出來對(duì)應(yīng)...
    陳觀齊閱讀 249評(píng)論 0 1
  • 在前端開發(fā)中閉包是一個(gè)很重要的知識(shí)點(diǎn)油额,是面試中一定會(huì)被問到的內(nèi)容叠纷。之前我對(duì)閉包的理解主要是"通過閉包可以在函數(shù)外部...
    CodeMT閱讀 174評(píng)論 0 0
  • 夜鶯2517閱讀 127,720評(píng)論 1 9