摘要:什么是閉包閉包與函數(shù)有著緊密的關(guān)系,以至于許多人將函數(shù)與閉包等同起來討論,但結(jié)果卻總是討論不清楚。由于引擎對(duì)每個(gè)函數(shù)建立其獨(dú)立的上下文環(huán)境,因此當(dāng)函數(shù)被再次執(zhí)行或進(jìn)入函數(shù)體內(nèi)的代碼時(shí),就將會(huì)得到閉包內(nèi)的全部信息。
什么是閉包????
閉包(Closure)與函數(shù)有著緊密的關(guān)系,以至于許多人將函數(shù)與閉包等同起來討論,但結(jié)果卻總是討論不清楚。
事實(shí)上在JavaScript 中,一個(gè)函數(shù)只是一段靜態(tài)的代碼、腳本文本,因此它是一個(gè)代碼書寫時(shí),以及編譯期的、靜態(tài)的概念;
而閉包則是函數(shù)的代碼在運(yùn)行過程中的一個(gè)動(dòng)態(tài)環(huán)境,是一個(gè)運(yùn)行期的、動(dòng)態(tài)的概念。
由于引擎對(duì)每個(gè)函數(shù)建立其獨(dú)立的上下文環(huán)境,因此當(dāng)函數(shù)被再次執(zhí)行或進(jìn)入函數(shù)體內(nèi)的代碼時(shí),就將會(huì)得到閉包內(nèi)的全部信息。
閉包具有兩個(gè)特點(diǎn):
第一:是閉包作為與函數(shù)成對(duì)的數(shù)據(jù),在函數(shù)執(zhí)行過程中處于激活(即可訪問) 狀態(tài);
第二:是閉包在函數(shù)運(yùn)行結(jié)束后,保持運(yùn)行過程的最終數(shù)據(jù)狀態(tài)。
因此函數(shù)的閉包總的來說決定了兩件事:閉包所對(duì)應(yīng)的函數(shù)代碼如何訪問數(shù)據(jù),以及閉包內(nèi)的數(shù)據(jù)何時(shí)銷毀。對(duì)于前者來說,涉及作用域(可見性)的問題;對(duì)于后者來說,涉及數(shù)據(jù)引用的識(shí)別。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/79500.html
摘要:此時(shí),中定義的局部變量就被保存在內(nèi)存中。所以當(dāng)執(zhí)行的時(shí)候,其真正的作用域是運(yùn)行時(shí)的作用域運(yùn)行時(shí)作用域詞法作用域所以第一次調(diào)用時(shí),由于是,所以返回而第二次返回是。因此在使用閉包時(shí),需要非常注意內(nèi)存泄漏的問題。 說起閉包,相信寫前端的同學(xué)都知道,而且相信在實(shí)際的項(xiàng)目中或多或少都已經(jīng)用到了閉包。那到底什么才是閉包,閉包又是怎么產(chǎn)生的呢? 1. 什么是閉包在阮老師的文章中提到: 閉包就是能夠讀...
摘要:閉包引起的內(nèi)存泄漏總結(jié)從理論的角度將由于作用域鏈的特性中所有函數(shù)都是閉包但是從應(yīng)用的角度來說只有當(dāng)函數(shù)以返回值返回或者當(dāng)函數(shù)以參數(shù)形式使用或者當(dāng)函數(shù)中自由變量在函數(shù)外被引用時(shí)才能成為明確意義上的閉包。 文章同步到github js的閉包概念幾乎是任何面試官都會(huì)問的問題,最近把閉包這塊的概念梳理了一下,記錄成以下文章。 什么是閉包 我先列出一些官方及經(jīng)典書籍等書中給出的概念,這些概念雖然...
摘要:所以,有另一種說法認(rèn)為閉包是由函數(shù)和與其相關(guān)的引用環(huán)境組合而成的實(shí)體。所以本文中將以維基百科中的定義為準(zhǔn)即在計(jì)算機(jī)科學(xué)中,閉包,又稱詞法閉包或函數(shù)閉包,是引用了自由變量的函數(shù)。 閉包(closure)是JavaScript中一個(gè)神秘的概念,許多人都對(duì)它難以理解,我也一直處于似懂非懂的狀態(tài),前幾天深入了解了一下執(zhí)行環(huán)境以及作用域鏈,可戳查看詳情,而閉包與作用域及作用域鏈的關(guān)系密不可分,所...
摘要:閉包閉包,目前還沒有統(tǒng)一的定義。展開這個(gè)對(duì)象果然是世界上最好的瀏覽器,給我們展示了閉包中訪問的變量。模塊化的始祖據(jù)筆者所了解,模塊化就是借用閉包來實(shí)現(xiàn)的。所以我們?cè)陂_發(fā)過程用要慎用閉包。 標(biāo)題為什么叫日了哈士奇?因?yàn)殚]包這個(gè)東西已經(jīng)在我腦海里縈繞了很久,大概有多久呢?(掰手指頭和腳指頭ing....) 大概是筆者從事前端工作的第一個(gè)月開始吧......仍記得那個(gè)時(shí)候還請(qǐng)教了公司的大神,...
摘要:該對(duì)象包含了函數(shù)的所有局部變量命名參數(shù)參數(shù)集合以及,然后此對(duì)象會(huì)被推入作用域鏈的前端。如果整個(gè)作用域鏈上都無法找到,則返回。此時(shí)的作用域鏈包含了兩個(gè)對(duì)象的活動(dòng)對(duì)象和對(duì)象。 前端學(xué)習(xí):教程&開發(fā)模塊化/規(guī)范化/工程化/優(yōu)化&工具/調(diào)試&值得關(guān)注的博客/Git&面試-前端資源匯總 歡迎提issues斧正:閉包 JavaScript-閉包 閉包(closure)是一個(gè)讓人又愛又恨的somet...
閱讀 2581·2021-11-15 11:37
閱讀 2709·2021-09-23 11:21
閱讀 3011·2021-09-07 10:11
閱讀 3211·2019-08-30 15:53
閱讀 2870·2019-08-29 15:13
閱讀 1647·2019-08-26 13:57
閱讀 1145·2019-08-26 12:23
閱讀 2483·2019-08-26 11:51