成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

LiuRhoRamen / 596人閱讀

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

閉包

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

為什么我們需要閉包

首先來看一個例子,我們來實現(xiàn)一個計數(shù)器。

var counter = 0;
function add() {
   return counter += 1;
}
add();
add();
add();// 計數(shù)器現(xiàn)在為 3

現(xiàn)在我們已經(jīng)達到了目的,可是問題來了,代碼中的任何一個函數(shù)都可以隨意改變counter的值,所以這個計數(shù)器并不完美。那我們把counter放在add函數(shù)里面不就好了么?

function add() {
    var counter = 0;
    return counter += 1;
} 
add();
add();
add();// 本意是想輸出 3, 但輸出的都是 1 

所以這樣做的話,每次調(diào)用add函數(shù),counter的值都要被初始化為0,還是達不到我們的目的。

如何使用閉包

所以這時候我們就要用閉包去解決這個問題了,先看代碼。

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

這時候我們完美實現(xiàn)了計數(shù)器。這段非常精簡,可以拆分成如下等價代碼。

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

這時候的add就形成了一個閉包。一個閉包由兩部分組成,函數(shù)和創(chuàng)建該函數(shù)的環(huán)境。環(huán)境是由環(huán)境中的局部變量組成的。對于閉包add來說,它由函數(shù)innerFunction和變量counter組成,所以這時候add是可以訪問變量counter的。

總結(jié)

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

閉包的原理其實還是作用域。

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

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

    cyixlq 評論0 收藏0

發(fā)表評論

0條評論

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