摘要:說到閉包大家可能會說函數(shù)套函數(shù),延長作用域鏈。剛開始一直不明白為什么執(zhí)行兩次的值會累加。我這屬于沒有明白函數(shù)的執(zhí)行環(huán)境及作用域鏈。
1.說到閉包大家可能會說函數(shù)套函數(shù),延長作用域鏈。對沒錯,確實是這樣的,但是你對他的理解是多少呢,函數(shù)閉包可以說的有很多,夸張的說,說個半天是絕對沒問題的,它的用處非常多,作用也非常多,這個需要你多想想的,不多說,下面我們來看代碼。
function A(){ var x = 1; return function(){ x++; console.log(x); } } var m1 = A(); m1();//2 m1();//3 var m2 = A(); m2();//2 m1();//4
剛開始一直不明白為什么m1執(zhí)行兩次x的值會累加。我這屬于沒有明白函數(shù)的執(zhí)行環(huán)境及作用域鏈。
當m1第一次執(zhí)行時A()會在內(nèi)存中開辟一個環(huán)境,然后返回函數(shù)也會開辟一個執(zhí)行環(huán)境也就是大圈里面有個小圈,
此時小圈里的x時從大圈里拿的,然后會打印2,第二次執(zhí)行m1時,由于第一次執(zhí)行m1延長作用域鏈,也就是大小圈依然存在而且里面的x=2,
此時大圈將x的值重新賦值為1,但是小圈里的x依舊是2,當執(zhí)行到x++是,
會檢測當前環(huán)境是否有x,答案是有此時x=2,執(zhí)行x++時就是2++,打印出來就是3,
當將A()給了m2時又會開辟一個環(huán)境,這兩個環(huán)境并不干擾,沒有任何聯(lián)系。
以上就是我對閉包的一點拙見,可能有不對的地方(全憑個人亂想),請大佬指正!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/102866.html
摘要:之前一篇文章我們詳細說明了變量對象,而這里,我們將詳細說明作用域鏈。而的作用域鏈,則同時包含了這三個變量對象,所以的執(zhí)行上下文可如下表示。下圖展示了閉包的作用域鏈。其中為當前的函數(shù)調(diào)用棧,為當前正在被執(zhí)行的函數(shù)的作用域鏈,為當前的局部變量。 showImg(https://segmentfault.com/img/remote/1460000008329355);初學JavaScrip...
摘要:所以,當在函數(shù)中使用全局變量的時候,所產(chǎn)生的代價是最大的,因為全局對象一直處于作用域鏈的最末位置,讀取局部變量是最快的。 什么是作用域 在編程語言中,作用域控制著變量與參數(shù)的可見性及生命周期,它能減少名稱沖突,而且提供了自動內(nèi)存管理(javascript 語言精粹) 靜態(tài)作用域 再者,js不像其他的編程語言一樣,擁有著塊級作用域,就像下面一段代碼。 function afunction...
摘要:閉包是怎么通過作用域鏈霸占更多內(nèi)存的本文是作者學習高級程序設(shè)計第一小節(jié)的一點個人理解,詳細教程請參考原教材。函數(shù)執(zhí)行過程創(chuàng)建了一個函數(shù)的活動對象,作用域鏈的最前端指向這個對象。函數(shù)執(zhí)行完畢返回值后執(zhí)行環(huán)境作用域鏈和活動對象一并銷毀。 JavaScript 閉包是怎么通過作用域鏈霸占更多內(nèi)存的? 本文是作者學習《JavaScript 高級程序設(shè)計》7.2第一小節(jié)的一點個人理解,詳細教程請...
摘要:執(zhí)行返回的內(nèi)部函數(shù),依然能訪問變量輸出閉包中的作用域鏈理解作用域鏈對理解閉包也很有幫助。早期的版本里采用是計數(shù)的垃圾回收機制,閉包導致內(nèi)存泄露的一個原因就是這個算法的一個缺陷。 關(guān)于閉包,我翻了幾遍書,看了幾遍視頻,查了一些資料,可是還是迷迷糊糊的,干脆自己動手來個總結(jié)吧 !歡迎指正... (~ o ~)~zZ 1. 什么是閉包? 來看一些關(guān)于閉包的定義: 閉包是指有權(quán)...
摘要:前言這段時間一直在消化作用域鏈和閉包的相關(guān)知識。而作用域鏈則是這套規(guī)則這套規(guī)則的具體運行。是變量對象的縮寫那這樣放有什么好處呢我們知道作用域鏈保證了當前執(zhí)行環(huán)境對符合訪問權(quán)限的變量和函數(shù)的有序訪問。 前言:這段時間一直在消化作用域鏈和閉包的相關(guān)知識。之前看《JS高程》和一些技術(shù)博客,對于這些概念的論述多多少少不太清楚或者不太完整,包括一些大神的技術(shù)文章。這也給我的學習上造成了一些困惑,...
摘要:但是,必須強調(diào),閉包是一個運行期概念。通過原型鏈可以實現(xiàn)繼承,而與閉包相關(guān)的就是作用域鏈。常理來說,一個函數(shù)執(zhí)行完畢,其執(zhí)行環(huán)境的作用域鏈會被銷毀。所以此時,的作用域鏈雖然銷毀了,但是其活動對象仍在內(nèi)存中。 學習Javascript閉包(Closure)javascript的閉包JavaScript 閉包深入理解(closure)理解 Javascript 的閉包JavaScript ...
閱讀 887·2021-10-13 09:39
閱讀 3540·2021-09-26 10:16
閱讀 2886·2019-08-30 15:54
閱讀 1052·2019-08-30 14:22
閱讀 2897·2019-08-29 15:39
閱讀 3264·2019-08-27 10:52
閱讀 818·2019-08-26 13:59
閱讀 1718·2019-08-26 12:20