国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

閉包簡介

gxyz / 1027人閱讀

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

為什么需要閉包?

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

var n = 10;

function foo() {
    alert(n);
}

foo();

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

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

肯定會(huì)報(bào)錯(cuò),n未定義。

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

是是是,確實(shí)是這樣,但是閉包還有其他的用途,比如使局部變量始終維持在內(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這個(gè)方法就還活著,而bar方法里又有變量n,所以這個(gè)n不能被銷毀

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

什么是閉包?

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

閉包的具體用途

看一個(gè)簡單的例子:

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

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

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

關(guān)于這篇文章

因?yàn)楸救怂接邢蓿也幌矚g去寫讓人看半天也看不懂的東西,所以語言比較通俗。而通俗往往也代表著不夠嚴(yán)謹(jǐn),不夠深入。所以文中有寫的不對(duì)或者不合理的地方,希望大家?guī)兔χ赋觥9裁?/p>

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/88800.html

相關(guān)文章

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

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

    Jinkey 評(píng)論0 收藏0
  • Deep in JS - 收藏集 - 掘金

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

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

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

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

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

    EdwardUp 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<