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