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

資訊專欄INFORMATION COLUMN

閉包簡介

gxyz / 1025人閱讀

摘要:是是是,確實是這樣,但是閉包還有其他的用途,比如使局部變量始終維持在內(nèi)存中,來看下面這段代碼上面這段代碼依次出和,那么就可以知道被保存在了內(nèi)存中。

為什么需要閉包?

我們知道,對于js來說,函數(shù)內(nèi)部可以訪問外部的全局變量,下面這段代碼會alert出10:

var n = 10;

function foo() {
    alert(n);
}

foo();

但是反過來,如果我想在外面獲取函數(shù)內(nèi)部的值呢?如下代碼:

function foo() {
    var n = 10;
}
console.log(n);

肯定會報錯,n未定義。

但是我就是想要這個n的值啊,你可能會說,這么折騰干嘛啊,你想要這個n,就在函數(shù)里return出來啊,整這么麻煩干嘛。

是是是,確實是這樣,但是閉包還有其他的用途,比如使局部變量始終維持在內(nèi)存中,來看下面這段代碼:

function foo() {
  var n = 10;
  var bar = function() {
    alert(n);
    n++;
  }

  return bar;
}

var myFuc = foo();
myFuc();
myFuc();

上面這段代碼依次alert出1011,那么就可以知道n被保存在了內(nèi)存中。那么為什么呢?

你可以這么理解,在foo方法調(diào)用完畢后,按理說要把它內(nèi)部的局部變量都給回收掉。但是!foo方法調(diào)用完畢后將bar方法作為返回值返回了,那么bar這個方法就還活著,而bar方法里又有變量n,所以這個n不能被銷毀

綜上所述, 可以知道閉包最重要的兩個作用
1.在外部獲取函數(shù)體內(nèi)部的局部變量。
2.維持函數(shù)中的局部變量在內(nèi)存中不被銷毀。

什么是閉包?

拋去很多晦澀難懂的定義,我認(rèn)為阮一峰老師所說的閉包是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)是最為簡潔好理解的。拿上面的例子來說,bar函數(shù)可以讀取foo函數(shù)中的變量n,bar函數(shù)就是一個閉包??梢园验]包簡單的理解成定義在函數(shù)內(nèi)部的函數(shù)。另外知乎某回答也是很形象閉包就是打入敵人內(nèi)部的間諜,通過他你可以接觸敵人對外封鎖的信息。

閉包的具體用途

看一個簡單的例子:

function warnUser() {
    var n = 0;
    
    return function() {
        n++;
        console.log("別鬧啦,你都點了" + n + "次了");     
    }
}

var showWarn = warnUser();
showWarn(); //"別鬧啦,你都點了1次了"
showWarn(); //"別鬧啦,你都點了2次了"
閉包的缺點

閉包會使變量保存在內(nèi)存中,內(nèi)存消耗大,濫用閉包會導(dǎo)致性能問題。

關(guān)于這篇文章

因為本人水平有限,而且不喜歡去寫讓人看半天也看不懂的東西,所以語言比較通俗。而通俗往往也代表著不夠嚴(yán)謹(jǐn),不夠深入。所以文中有寫的不對或者不合理的地方,希望大家?guī)兔χ赋?。共?/p>

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

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

相關(guān)文章

  • Python 函數(shù)式編程、裝飾器以及一些相關(guān)概念簡介

    摘要:重寫內(nèi)建名字空間中的函數(shù)閉包閉包是詞法閉包的簡稱。另一種說法認(rèn)為閉包是由函數(shù)和與其相關(guān)的引用環(huán)境組合而成的實體。 Python 中的 Decorator(裝飾器) 是對一個函數(shù)或者方法的封裝,從而使其可以完成一些與自身功能無關(guān)的工作。 預(yù)備知識 一切皆對象 在 Python 中,所有的一切都被視為對象,任何的變量、函數(shù)、類等都是 object 的子類。因此除了變量之外,函數(shù)和類等也可以...

    Jinkey 評論0 收藏0
  • Deep in JS - 收藏集 - 掘金

    摘要:今天同學(xué)去面試,做了兩道面試題全部做錯了,發(fā)過來給道典型的面試題前端掘金在界中,開發(fā)人員的需求量一直居高不下。 排序算法 -- JavaScript 標(biāo)準(zhǔn)參考教程(alpha) - 前端 - 掘金來自《JavaScript 標(biāo)準(zhǔn)參考教程(alpha)》,by 阮一峰 目錄 冒泡排序 簡介 算法實現(xiàn) 選擇排序 簡介 算法實現(xiàn) ... 圖例詳解那道 setTimeout 與循環(huán)閉包的經(jīng)典面...

    enali 評論0 收藏0
  • 函數(shù)式編程了解一下(上)

    摘要:一直以來沒有對函數(shù)式編程有一個全面的學(xué)習(xí)和使用,或者說沒有一個深刻的思考。是不是輕松了其實函數(shù)式編程主張的就是以抽象的方式創(chuàng)建函數(shù)。后面咱們在系統(tǒng)性的學(xué)習(xí)下函數(shù)式編程。 一直以來沒有對函數(shù)式編程有一個全面的學(xué)習(xí)和使用,或者說沒有一個深刻的思考。最近看到一些博客文章,突然覺得函數(shù)式編程還是蠻有意思的。看了些書和文章。這里記載下感悟和收獲。 歡迎團隊姜某人多多指點@姜少。 由于博客秉持著簡...

    int64 評論0 收藏0
  • JS 基礎(chǔ)篇--閉包和引用

    摘要:因為沒有塊級作用域,只有函數(shù)作用域,所以閉包的使用與函數(shù)是緊密相關(guān)的。模擬私有變量這里返回兩個閉包函數(shù)和。閉包會在父函數(shù)外部,改變父函數(shù)內(nèi)部變量的值。 簡介 Javascript 中一個最重要的特性就是閉包的使用。因為閉包的使用,當(dāng)前作用域總可以訪問外部的作用域。因為Javascript 沒有塊級作用域,只有函數(shù)作用域,所以閉包的使用與函數(shù)是緊密相關(guān)的。 各種專業(yè)文獻上的閉包(clos...

    EdwardUp 評論0 收藏0

發(fā)表評論

0條評論

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