深入理解js閉包

一萝喘、概念
定義在函數(shù)內(nèi)部的函數(shù),通俗理解就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)。
二阁簸、用途
閉包的用途:其一就是讀取函數(shù)內(nèi)部的變量爬早;其二就是讓這些變量始終保持在內(nèi)容中。
三启妹、實(shí)例剖析
function f1(){
var n=999;
ndd=function(){n+=1}
function f2(){
alert(n);
}
return f2;
}
var result=f1();
result();//999
ndd();
result();//1000
該例子中筛严,result實(shí)際上就是閉包了f2函數(shù),該函數(shù)工運(yùn)行了兩次饶米,第一次運(yùn)行后999桨啃,第二次運(yùn)行結(jié)果是1000,這說(shuō)明函數(shù)f1的局部變量n一直在內(nèi)存當(dāng)中檬输,沒(méi)有在函數(shù)f1被用結(jié)束自動(dòng)清除照瘾。原因在于f1是f2的父函數(shù),而f2被賦值給一個(gè)全局變量丧慈,這到這f2始終保存在內(nèi)存當(dāng)中析命,而f2的存在依賴于函數(shù)f1,因此f1始終在內(nèi)存中逃默,在調(diào)用結(jié)束后不會(huì)被垃圾回收機(jī)制回收碳却。
ndd這一行前邊并沒(méi)有加var這個(gè)關(guān)鍵詞,因此ndd是一個(gè)全局變量笑旺,而且ndd本身是一個(gè)函數(shù)昼浦,它也是個(gè)閉包,所以ndd相當(dāng)于是一個(gè)setter筒主,可以在函數(shù)外部對(duì)函數(shù)內(nèi)部的局部變量進(jìn)行操作关噪。
四、使用閉包注意點(diǎn)
1)由于閉包會(huì)使得函數(shù)中的變量都被保存在內(nèi)存中乌妙,內(nèi)存消耗很大使兔,所以不能濫用閉包,否則會(huì)造成網(wǎng)頁(yè)的性能問(wèn)題藤韵,在IE中可能導(dǎo)致內(nèi)存泄露虐沥。解決方法是,在退出函數(shù)之前泽艘,將不使用的局部變量全部刪除
2)閉包會(huì)在父函數(shù)外部欲险,改變父函數(shù)內(nèi)部變量的值。所以匹涮,如果你把父函數(shù)當(dāng)作對(duì)象(object)使用天试,把閉包當(dāng)作它的公用方法(Public Method),把內(nèi)部變量當(dāng)作它的私有屬性(private value)然低,這時(shí)一定要小心喜每,不要隨便改變父函數(shù)內(nèi)部變量的值务唐。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市带兜,隨后出現(xiàn)的幾起案子枫笛,更是在濱河造成了極大的恐慌,老刑警劉巖刚照,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件崇堰,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡涩咖,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)繁莹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)檩互,“玉大人,你說(shuō)我怎么就攤上這事咨演≌⒆颍” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵薄风,是天一觀的道長(zhǎng)饵较。 經(jīng)常有香客問(wèn)我,道長(zhǎng)遭赂,這世上最難降的妖魔是什么循诉? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮撇他,結(jié)果婚禮上茄猫,老公的妹妹穿的比我還像新娘。我一直安慰自己困肩,他們只是感情好划纽,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著锌畸,像睡著了一般勇劣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上潭枣,一...
    開(kāi)封第一講書(shū)人閱讀 51,598評(píng)論 1 305
  • 那天比默,我揣著相機(jī)與錄音,去河邊找鬼盆犁。 笑死退敦,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蚣抗。 我是一名探鬼主播侈百,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼瓮下,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了钝域?” 一聲冷哼從身側(cè)響起讽坏,我...
    開(kāi)封第一講書(shū)人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎例证,沒(méi)想到半個(gè)月后路呜,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡织咧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年胀葱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片笙蒙。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡抵屿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出捅位,到底是詐尸還是另有隱情轧葛,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布艇搀,位于F島的核電站尿扯,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏焰雕。R本人自食惡果不足惜衷笋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望矩屁。 院中可真熱鬧右莱,春花似錦、人聲如沸档插。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)郭膛。三九已至晨抡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間则剃,已是汗流浹背耘柱。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留棍现,地道東北人调煎。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像己肮,于是被迫代替她去往敵國(guó)和親士袄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子悲关,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

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

  • 閉包(closure)是Javascript語(yǔ)言的一個(gè)難點(diǎn),也是它的特色娄柳,很多高級(jí)應(yīng)用都要依靠閉包實(shí)現(xiàn)寓辱。 一、變量...
    zock閱讀 1,075評(píng)論 2 6
  • 一赤拒、變量的作用域要理解閉包秫筏,首先必須理解Javascript特殊的變量作用域。變量的作用域無(wú)非就是兩種:全局變量和...
    Bigbang_boy閱讀 179評(píng)論 0 0
  • 今天研究了一波js中的閉包挎挖,分享一下自己的理解这敬。 一、變量的作用域 要理解閉包蕉朵,首先必須理解Javascript特...
    阿布_0caf閱讀 249評(píng)論 0 2
  • 人之一生便畏死崔涂,沒(méi)有人是不怕死的。 歐陽(yáng)桂就是一個(gè)怕死的兵部尚書(shū)墓造,比起常人,身居高位和娘娘的喜怒無(wú)情锚烦,都讓他怕死到...
    末無(wú)閱讀 557評(píng)論 0 1
  • 先要有好的身體觅闽,才能談奮斗。
    L1001閱讀 85評(píng)論 0 0