亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

為什么要使用閉包和如何使用閉包

LiuRhoRamen / 630人閱讀

摘要:閉包中的閉包是一個(gè)我們經(jīng)常遇到的名詞,到底什么是閉包為什么我們要使用閉包又該如何使用閉包呢為什么我們需要閉包首先來看一個(gè)例子,我們來實(shí)現(xiàn)一個(gè)計(jì)數(shù)器。如何使用閉包所以這時(shí)候我們就要用閉包去解決這個(gè)問題了,先看代碼。

閉包

JS中的閉包是一個(gè)我們經(jīng)常遇到的名詞,到底什么是閉包?為什么我們要使用閉包?又該如何使用閉包呢?

為什么我們需要閉包

首先來看一個(gè)例子,我們來實(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á)到了目的,可是問題來了,代碼中的任何一個(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è)問題了,先看代碼。

var add = (function () {
    var counter = 0;
    return function () {return counter += 1;}
})();
add();
add();
add();// 計(jì)數(shù)器為 3

這時(shí)候我們完美實(shí)現(xiàn)了計(jì)數(shù)器。這段非常精簡,可以拆分成如下等價(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)境中的局部變量組成的。對于閉包add來說,它由函數(shù)innerFunction和變量counter組成,所以這時(shí)候add是可以訪問變量counter的。

總結(jié)

所以閉包的功能就是使一個(gè)函數(shù)能訪問另一個(gè)函數(shù)作用域中的變量。形成閉包之后,該變量不會被垃圾回收機(jī)制回收。

閉包的原理其實(shí)還是作用域。

使用閉包的優(yōu)點(diǎn)是可以避免全局變量污染,缺點(diǎn)是容易造成內(nèi)存泄露。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/107382.html

相關(guān)文章

  • 面試官問我:什么是JavaScript閉包,我該如何回答

    摘要:到底什么是閉包這個(gè)問題在面試是時(shí)候經(jīng)常都會被問,很多小白一聽就懵逼了,不知道如何回答好。上面這么說閉包是一種特殊的對象。閉包的注意事項(xiàng)通常,函數(shù)的作用域及其所有變量都會在函數(shù)執(zhí)行結(jié)束后被銷毀。從而使用閉包模塊化代碼,減少全局變量的污染。 閉包,有人說它是一種設(shè)計(jì)理念,有人說所有的函數(shù)都是閉包。到底什么是閉包?這個(gè)問題在面試是時(shí)候經(jīng)常都會被問,很多小白一聽就懵逼了,不知道如何回答好。這個(gè)...

    BenCHou 評論0 收藏0
  • 老生常談之閉包(你不可不知的若干知識點(diǎn))

    摘要:閉包是什么這是一個(gè)在面試的過程中出現(xiàn)的概率為以上的問題,也是我們張口就來的問題。文章推薦我們面試中在被問到閉包這個(gè)問題是要注意的幾點(diǎn)閉包的延伸,讓面試變得 閉包是什么?這是一個(gè)在面試的過程中出現(xiàn)的概率為60%以上的問題,也是我們張口就來的問題。但是我們往往發(fā)現(xiàn),在面試的過程中我們的回答并不那么讓面試官滿意,我們雖然能張口說出一些但是卻不能系統(tǒng)的對這個(gè)問題進(jìn)行回答。面試官希望加入自己團(tuán)隊(duì)...

    daydream 評論0 收藏0
  • JS 中的閉包什么?

    摘要:大名鼎鼎的閉包面試必問。閉包的作用是什么。看到閉包在哪了嗎閉包到底是什么五年前,我也被這個(gè)問題困擾,于是去搜了并總結(jié)下來。關(guān)于閉包的謠言閉包會造成內(nèi)存泄露錯(cuò)。閉包里面的變量明明就是我們需要的變量,憑什么說是內(nèi)存泄露這個(gè)謠言是如何來的因?yàn)椤? 本文為饑人谷講師方方原創(chuàng)文章,首發(fā)于 前端學(xué)習(xí)指南。 大名鼎鼎的閉包!面試必問。請用自己的話簡述 什么是「閉包」。 「閉包」的作用是什么。 首先...

    Enlightenment 評論0 收藏0
  • 什么閉包?閉包的優(yōu)缺點(diǎn)?

    摘要:什么是閉包閉包的優(yōu)缺點(diǎn)閉包是的一大難點(diǎn),也是它的特色。閉包的用途閉包可以用在許多地方。閉包會在父函數(shù)外部,改變父函數(shù)內(nèi)部變量的值。 什么是閉包?閉包的優(yōu)缺點(diǎn)? 閉包(closure)是javascript的一大難點(diǎn),也是它的特色。很多高級應(yīng)用都要依靠閉包來實(shí)現(xiàn)。 1、變量作用域 要理解閉包,首先要理解javascript的特殊的變量作用域。變量的作用域無非就兩種:全局變量和局部變量。...

    fireflow 評論0 收藏0
  • 進(jìn)擊JavaScript之(三)玩轉(zhuǎn)閉包

    摘要:為了更好的理解,在閱讀此文之前建議先閱讀上一篇進(jìn)擊之詞法作用域與作用域鏈?zhǔn)裁词情]包閉包的含義就是閉合,包起來,簡單的來說,就是一個(gè)具有封閉功能與包裹功能的結(jié)構(gòu)。在中函數(shù)構(gòu)成閉包。 為了更好的理解,在閱讀此文之前建議先閱讀上一篇《進(jìn)擊JavaScript之詞法作用域與作用域鏈》 1.什么是閉包 閉包的含義就是閉合,包起來,簡單的來說,就是一個(gè)具有封閉功能與包裹功能的結(jié)構(gòu)。所謂的閉包就是...

    cyixlq 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<