摘要:閉包中的閉包是一個(gè)我們經(jīng)常遇到的名詞,到底什么是閉包為什么我們要使用閉包又該如何使用閉包呢為什么我們需要閉包首先來(lái)看一個(gè)例子,我們來(lái)實(shí)現(xiàn)一個(gè)計(jì)數(shù)器。如何使用閉包所以這時(shí)候我們就要用閉包去解決這個(gè)問(wèn)題了,先看代碼。
閉包
JS中的閉包是一個(gè)我們經(jīng)常遇到的名詞,到底什么是閉包?為什么我們要使用閉包?又該如何使用閉包呢?
為什么我們需要閉包首先來(lái)看一個(gè)例子,我們來(lái)實(shí)現(xiàn)一個(gè)計(jì)數(shù)器。
var counter = 0; function add() { return counter += 1; } add(); add(); add();// 計(jì)數(shù)器現(xiàn)在為 3
現(xiàn)在我們已經(jīng)達(dá)到了目的,可是問(wèn)題來(lái)了,代碼中的任何一個(gè)函數(shù)都可以隨意改變counter的值,所以這個(gè)計(jì)數(shù)器并不完美。那我們把counter放在add函數(shù)里面不就好了么?
function add() { var counter = 0; return counter += 1; } add(); add(); add();// 本意是想輸出 3, 但輸出的都是 1
所以這樣做的話,每次調(diào)用add函數(shù),counter的值都要被初始化為0,還是達(dá)不到我們的目的。
如何使用閉包所以這時(shí)候我們就要用閉包去解決這個(gè)問(wèn)題了,先看代碼。
var add = (function () { var counter = 0; return function () {return counter += 1;} })(); add(); add(); add();// 計(jì)數(shù)器為 3
這時(shí)候我們完美實(shí)現(xiàn)了計(jì)數(shù)器。這段非常精簡(jiǎn),可以拆分成如下等價(jià)代碼。
function outerFunction () { var counter = 0; function innerFunction (){ return counter += 1; } return innerFunction; } var add = outerFunction(); add(); add(); add();// 計(jì)數(shù)器為 3
這時(shí)候的add就形成了一個(gè)閉包。一個(gè)閉包由兩部分組成,函數(shù)和創(chuàng)建該函數(shù)的環(huán)境。環(huán)境是由環(huán)境中的局部變量組成的。對(duì)于閉包add來(lái)說(shuō),它由函數(shù)innerFunction和變量counter組成,所以這時(shí)候add是可以訪問(wèn)變量counter的。
總結(jié)所以閉包的功能就是使一個(gè)函數(shù)能訪問(wèn)另一個(gè)函數(shù)作用域中的變量。形成閉包之后,該變量不會(huì)被垃圾回收機(jī)制回收。
閉包的原理其實(shí)還是作用域。
使用閉包的優(yōu)點(diǎn)是可以避免全局變量污染,缺點(diǎn)是容易造成內(nèi)存泄露。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/107382.html
摘要:到底什么是閉包這個(gè)問(wèn)題在面試是時(shí)候經(jīng)常都會(huì)被問(wèn),很多小白一聽(tīng)就懵逼了,不知道如何回答好。上面這么說(shuō)閉包是一種特殊的對(duì)象。閉包的注意事項(xiàng)通常,函數(shù)的作用域及其所有變量都會(huì)在函數(shù)執(zhí)行結(jié)束后被銷毀。從而使用閉包模塊化代碼,減少全局變量的污染。 閉包,有人說(shuō)它是一種設(shè)計(jì)理念,有人說(shuō)所有的函數(shù)都是閉包。到底什么是閉包?這個(gè)問(wèn)題在面試是時(shí)候經(jīng)常都會(huì)被問(wèn),很多小白一聽(tīng)就懵逼了,不知道如何回答好。這個(gè)...
摘要:閉包是什么這是一個(gè)在面試的過(guò)程中出現(xiàn)的概率為以上的問(wèn)題,也是我們張口就來(lái)的問(wèn)題。文章推薦我們面試中在被問(wèn)到閉包這個(gè)問(wèn)題是要注意的幾點(diǎn)閉包的延伸,讓面試變得 閉包是什么?這是一個(gè)在面試的過(guò)程中出現(xiàn)的概率為60%以上的問(wèn)題,也是我們張口就來(lái)的問(wèn)題。但是我們往往發(fā)現(xiàn),在面試的過(guò)程中我們的回答并不那么讓面試官滿意,我們雖然能張口說(shuō)出一些但是卻不能系統(tǒng)的對(duì)這個(gè)問(wèn)題進(jìn)行回答。面試官希望加入自己團(tuán)隊(duì)...
摘要:大名鼎鼎的閉包面試必問(wèn)。閉包的作用是什么??吹介]包在哪了嗎閉包到底是什么五年前,我也被這個(gè)問(wèn)題困擾,于是去搜了并總結(jié)下來(lái)。關(guān)于閉包的謠言閉包會(huì)造成內(nèi)存泄露錯(cuò)。閉包里面的變量明明就是我們需要的變量,憑什么說(shuō)是內(nèi)存泄露這個(gè)謠言是如何來(lái)的因?yàn)椤? 本文為饑人谷講師方方原創(chuàng)文章,首發(fā)于 前端學(xué)習(xí)指南。 大名鼎鼎的閉包!面試必問(wèn)。請(qǐng)用自己的話簡(jiǎn)述 什么是「閉包」。 「閉包」的作用是什么。 首先...
摘要:什么是閉包閉包的優(yōu)缺點(diǎn)閉包是的一大難點(diǎn),也是它的特色。閉包的用途閉包可以用在許多地方。閉包會(huì)在父函數(shù)外部,改變父函數(shù)內(nèi)部變量的值。 什么是閉包?閉包的優(yōu)缺點(diǎn)? 閉包(closure)是javascript的一大難點(diǎn),也是它的特色。很多高級(jí)應(yīng)用都要依靠閉包來(lái)實(shí)現(xiàn)。 1、變量作用域 要理解閉包,首先要理解javascript的特殊的變量作用域。變量的作用域無(wú)非就兩種:全局變量和局部變量。...
摘要:為了更好的理解,在閱讀此文之前建議先閱讀上一篇進(jìn)擊之詞法作用域與作用域鏈?zhǔn)裁词情]包閉包的含義就是閉合,包起來(lái),簡(jiǎn)單的來(lái)說(shuō),就是一個(gè)具有封閉功能與包裹功能的結(jié)構(gòu)。在中函數(shù)構(gòu)成閉包。 為了更好的理解,在閱讀此文之前建議先閱讀上一篇《進(jìn)擊JavaScript之詞法作用域與作用域鏈》 1.什么是閉包 閉包的含義就是閉合,包起來(lái),簡(jiǎn)單的來(lái)說(shuō),就是一個(gè)具有封閉功能與包裹功能的結(jié)構(gòu)。所謂的閉包就是...
閱讀 2210·2021-11-23 09:51
閱讀 1495·2019-08-30 15:55
閱讀 1752·2019-08-30 15:44
閱讀 893·2019-08-30 14:11
閱讀 1284·2019-08-30 14:10
閱讀 1056·2019-08-30 13:52
閱讀 2781·2019-08-30 12:50
閱讀 759·2019-08-29 15:04