摘要:閉包是函數(shù)內(nèi)部的子函數(shù)能讀取局部變量二閉包的特點(diǎn)函數(shù)里面嵌套函數(shù)內(nèi)部函數(shù)能訪問(wèn)外部函數(shù)的變量定義的參數(shù)和變量不會(huì)回收三閉包的前提先明白什么是全局變量和局部變量中聲明變量格式關(guān)鍵字變量名標(biāo)識(shí)符。建議在退出函數(shù)之前,將不使用的局部變量全部刪除。
一、閉包的概念
閉包是指一個(gè)函數(shù)能夠訪問(wèn)其函數(shù)外部作用域中的變量。
JavaScript閉包是函數(shù)內(nèi)部的子函數(shù)能讀取局部變量
函數(shù)里面嵌套函數(shù)
內(nèi)部函數(shù)能訪問(wèn)外部函數(shù)的變量
定義的參數(shù)和變量不會(huì)回收
三、JavaScript閉包的前提先明白什么是全局變量和局部變量
JavaScript中聲明變量格式:var(關(guān)鍵字)+變量名(標(biāo)識(shí)符)。
全局變量:
不在函數(shù)function內(nèi)部用var關(guān)鍵字聲明如:
var text; var text=10;
在函數(shù)function內(nèi)部沒(méi)有使用var關(guān)鍵字聲明卻直接賦值如:
function show(){
text=10;
}
局部變量:在函數(shù)function內(nèi)部使用var關(guān)鍵字聲明并賦值如:
function show(){
var text=10;
}
簡(jiǎn)單舉1個(gè)小例子
創(chuàng)作一個(gè)列表鼠標(biāo)點(diǎn)擊時(shí)使其一行背景色變?yōu)榧t色,點(diǎn)擊另一行時(shí)上次點(diǎn)擊的變?yōu)樵瓨印?br>首先創(chuàng)造列表
使用JavaScript閉包,先取出所有的li,然后用for循環(huán)找到一個(gè)個(gè)li并用function函數(shù)封裝并給其添加樣式,在函數(shù)內(nèi)部for循環(huán)清除上一次點(diǎn)擊的背景色。
由上面可以看出閉包的兩個(gè)用途:一個(gè)是前面提到的可以讀取函數(shù)內(nèi)部的變量,另一個(gè)就是讓這些變量的值始終保持在內(nèi)存中。
五、JavaScript閉包的缺點(diǎn)及其使用建議閉包有一個(gè)嚴(yán)重的缺點(diǎn):內(nèi)存浪費(fèi)問(wèn)題。不僅僅因?yàn)樗qv內(nèi)存,更主要的是,對(duì)閉包的使用不當(dāng)會(huì)造成無(wú)效內(nèi)存的產(chǎn)生。
建議:在退出函數(shù)之前,將不使用的局部變量全部刪除。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/96257.html
摘要:閉包在我理解是一種比較抽象的東西。所以我寫了一篇博文來(lái)方便自己理解閉包。那么現(xiàn)在我們可以解釋一下閉包的第一個(gè)定義在計(jì)算機(jī)科學(xué)中,閉包是引用了自由變量的函數(shù)。循環(huán)中創(chuàng)建閉包在我們使用的關(guān)鍵字之前,閉包的一個(gè)常見(jiàn)問(wèn)題就出現(xiàn)在循環(huán)中創(chuàng)建閉包。 零. 前言 從我開始接觸前端時(shí)就聽(tīng)說(shuō)過(guò)閉包,但是一直不理解閉包究竟是什么。上網(wǎng)看了各種博客,大家對(duì)閉包的說(shuō)法不一。閉包在我理解是一種比較抽象的東西。所...
摘要:譯者按在上一篇博客,我們通過(guò)實(shí)現(xiàn)一個(gè)計(jì)數(shù)器,了解了如何使用閉包,這篇博客將提供一些代碼示例,幫助大家理解閉包。然而,如果通過(guò)代碼示例去理解閉包,則簡(jiǎn)單很多。不過(guò),將閉包簡(jiǎn)單地看做局部變量,理解起來(lái)會(huì)更加簡(jiǎn)單。 - 譯者按: 在上一篇博客,我們通過(guò)實(shí)現(xiàn)一個(gè)計(jì)數(shù)器,了解了如何使用閉包(Closure),這篇博客將提供一些代碼示例,幫助大家理解閉包。 原文: JavaScript Clos...
摘要:如何在初學(xué)就理解閉包你需要接著讀下去。這樣定義閉包是函數(shù)和聲明該函數(shù)的詞法環(huán)境的組合。小結(jié)閉包在中隨處可見(jiàn)。閉包是中的精華部分,理解它需要具備一定的作用域執(zhí)行棧的知識(shí)。 這是本系列的第 4 篇文章。 作為 JS 初學(xué)者,第一次接觸閉包的概念是因?yàn)閷懗隽祟愃葡旅娴拇a: for (var i = 0; i < helpText.length; i++) { var item = he...
摘要:但是閉包也不是什么復(fù)雜到不可理解的東西,簡(jiǎn)而言之,閉包就是閉包就是函數(shù)的局部變量集合,只是這些局部變量在函數(shù)返回后會(huì)繼續(xù)存在。可惜的是,并沒(méi)有提供相關(guān)的成員和方法來(lái)訪問(wèn)閉包中的局部變量。 (收藏自 技術(shù)狂) 前言:還是一篇入門文章。Javascript中有幾個(gè)非常重要的語(yǔ)言特性——對(duì)象、原型繼承、閉包。其中閉包 對(duì)于那些使用傳統(tǒng)靜態(tài)語(yǔ)言C/C++的程序員來(lái)說(shuō)是一個(gè)新的語(yǔ)言特性。本文將...
摘要:當(dāng)面試中讓我解釋一下閉包時(shí)我懵逼了。這個(gè)解釋開始可能有點(diǎn)晦澀,讓我們抽絲剝繭摘下閉包的真面目。此文不詳述作用域有專門的主題闡述,不過(guò)作用域是理解閉包原理的基礎(chǔ)。這才是閉包的真正便利之處。閉包使用不當(dāng)就會(huì)很坑。 原文鏈接 為什么深度學(xué)習(xí)JavaScript? JavaScript如今是最流行的編程語(yǔ)言之一。它運(yùn)行在瀏覽器、服務(wù)器、移動(dòng)設(shè)備、桌面應(yīng)用,也可能包括冰箱。無(wú)需我舉其他再多不相干...
閱讀 1714·2021-09-02 09:55
閱讀 1201·2019-08-30 13:19
閱讀 1449·2019-08-26 13:51
閱讀 1535·2019-08-26 13:49
閱讀 2474·2019-08-26 12:13
閱讀 506·2019-08-26 11:52
閱讀 1977·2019-08-26 10:58
閱讀 3143·2019-08-26 10:19