摘要:網(wǎng)上關(guān)于閉包的解釋有很多,大多都過(guò)于概念化,定義很精準(zhǔn)也很難看懂在說(shuō)什么。。首先貼一道經(jīng)典的閉包題理解閉包之前,我們要明確垃圾回收機(jī)制中關(guān)于引用次數(shù)的判斷,即當(dāng)引用對(duì)象的引用計(jì)數(shù)為的時(shí)候,表明此對(duì)象值可回收。
網(wǎng)上關(guān)于閉包的解釋有很多,大多都過(guò)于概念化,定義很精準(zhǔn)也很難看懂在說(shuō)什么。。
首先貼一道經(jīng)典的閉包題:
`
function a(){ var b=0 return function(){ console.log(b++) } } var c=a() var d=a() c() //0 c() //1 d() //0
`
理解閉包之前,我們要明確js垃圾回收機(jī)制中關(guān)于引用次數(shù)的判斷,即當(dāng)引用對(duì)象的引用計(jì)數(shù)為0的時(shí)候,表明此對(duì)象值可回收。一個(gè)參數(shù)的作用域,即其是否能被調(diào)用,在于其調(diào)用時(shí)是否被回收,被回收了自然不能被調(diào)用。
以上代碼,當(dāng)執(zhí)行var c=a()時(shí),可以理解為方法a開(kāi)辟了一個(gè)新的內(nèi)存空間area1,area1中定義的變量b,由于返回的function中引用了變量area1.b(為了方便理解,以此表示area1空間中的b變量),因此area1.b的引用次數(shù)為1,即垃圾回收機(jī)制不會(huì)對(duì)area1.b進(jìn)行回收,后續(xù)執(zhí)行c()時(shí)依然可以調(diào)用area1.b
同理,var d=a(),此時(shí)開(kāi)辟新的內(nèi)存空間area2,并在其中定義變量b。
因此上述代碼可以理解為:
`
function a(){ var b=0 return function(){ console.log(b++) } } var c=a() var d=a() c() //執(zhí)行console.log(area1.b++),輸出0 c() //執(zhí)行console.log(area1.b++),輸出1 d() //執(zhí)行console.log(area2.b++),輸出0
`
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/102353.html
摘要:一言以蔽之,閉包,你就得掌握。當(dāng)函數(shù)記住并訪問(wèn)所在的詞法作用域,閉包就產(chǎn)生了。所以閉包才會(huì)得以實(shí)現(xiàn)。從技術(shù)上講,這就是閉包。執(zhí)行后,他的內(nèi)部作用域并不會(huì)消失,函數(shù)依然保持有作用域的閉包。 網(wǎng)上總結(jié)閉包的文章已經(jīng)爛大街了,不敢說(shuō)筆者這篇文章多么多么xxx,只是個(gè)人理解總結(jié)。各位看官瞅瞅就好,大神還希望多多指正。此篇文章總結(jié)與《JavaScript忍者秘籍》 《你不知道的JavaScri...
摘要:兩日前,發(fā)了一篇吐槽,莫名的火了一把。關(guān)于的第一個(gè),其實(shí)就是聲明一個(gè)常量,不允許變更。另外對(duì)象迭代這里出自,阮一峰大神寫(xiě)的入門(mén)指南,對(duì)象篇。 兩日前,發(fā)了一篇吐槽,莫名的火了一把。經(jīng)過(guò)大家的建議與鼓勵(lì),于是修改了簡(jiǎn)歷,開(kāi)始了重新投遞,2天后接到第一份面試邀請(qǐng)。 此文為個(gè)人面試經(jīng)歷,QA問(wèn)答過(guò)程與總結(jié),不透露面試公司及面試人員,內(nèi)容真實(shí),如果有面試過(guò)我的大佬看到博客,歡迎指出問(wèn)題。 循序...
摘要:在上面的執(zhí)行中,只是又返回了一個(gè)新的對(duì)象,但是并沒(méi)有執(zhí)行新對(duì)象里面的屬性對(duì)應(yīng)的匿名函數(shù)喔,那就是沒(méi)有改變的值啊,所以你繼續(xù)也會(huì)輸出同樣的結(jié)果啊。 關(guān)于javascript中的閉包 我GitHub上的菜鳥(niǎo)倉(cāng)庫(kù)地址: 點(diǎn)擊跳轉(zhuǎn)查看其他相關(guān)文章 文章在我的博客上的地址: 點(diǎn)擊跳轉(zhuǎn) ? ? ? ? 其實(shí)關(guān)于閉包的定義,很多種說(shuō)法,而關(guān)于閉包的解釋,更是多不勝數(shù)了。很多說(shuō)得非常復(fù)雜,也有很多...
摘要:關(guān)于循環(huán)和閉包當(dāng)循環(huán)和閉包結(jié)合在一起時(shí),經(jīng)常會(huì)產(chǎn)生讓初學(xué)者覺(jué)得匪夷所思的問(wèn)題。閉包是一把雙刃劍是比較難以理解和掌握的部分,它十分強(qiáng)大,卻也有很大的缺陷,如何使用它完全取決于你自己。 在談閉包之前,我們首先要了解幾個(gè)概念: 什么是函數(shù)表達(dá)式? 與函數(shù)聲明有何不同? JavaScript查找標(biāo)識(shí)符的機(jī)制 JavaScript的作用域是詞法作用域 JavaScript的垃圾回收機(jī)制 先來(lái)...
閱讀 3066·2023-04-26 00:49
閱讀 3729·2021-09-29 09:45
閱讀 995·2019-08-29 18:47
閱讀 2751·2019-08-29 18:37
閱讀 2734·2019-08-29 16:37
閱讀 3300·2019-08-29 13:24
閱讀 1782·2019-08-27 10:56
閱讀 2352·2019-08-26 11:42