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

資訊專欄INFORMATION COLUMN

【js】what is 閉包

Godtoy / 959人閱讀

摘要:什么是閉包給出的官方回答是閉包是由函數(shù)以及創(chuàng)建該函數(shù)的詞法環(huán)境組合而成。這就是閉包的核心。當(dāng)函數(shù)執(zhí)行完后,被作為返回值函數(shù)保留在了作用域中。閉包還有一個(gè)作用是模擬私有方法和變量。閉包的缺點(diǎn)由上文可知閉包的作用可以使數(shù)據(jù)保存在內(nèi)存中。

什么是閉包?
MDN給出的官方回答是“閉包是由函數(shù)以及創(chuàng)建該函數(shù)的詞法環(huán)境組合而成。這個(gè)環(huán)境包含了這個(gè)閉包創(chuàng)建時(shí)所能訪問(wèn)的所有局部變量

看代碼

//一個(gè)函數(shù)里面包含了另一個(gè)函數(shù),最后已返回值返回被包裹的的函數(shù)。
function func() {
    let a = 1;
    function closer(){
        console.log(a)
    }
    return closer
}
let b = func()
b() // 1

按照正常的js作用域,當(dāng)func執(zhí)行完后a已經(jīng)被銷(xiāo)毀,但是變量b仍然能夠訪問(wèn)到它里面的變量。
這就是閉包的核心。當(dāng)函數(shù)執(zhí)行完后,被作為返回值函數(shù)保留在了作用域中。以至于里面的數(shù)據(jù)沒(méi)有被銷(xiāo)毀,仍然可以訪問(wèn)到。
閉包還有一個(gè)作用是模擬私有方法和變量。要知道,js是不支持定義私有方法和變量的。
通過(guò)這個(gè)類(lèi)作為對(duì)象返回私有方法和屬性,便可以保證它們只可以被Create所調(diào)用。

function Create(){
   var privateCounter = 0;
   function changeBy(val) {
     privateCounter += val;
   }
   return {
        increment: function() {
          changeBy(1);
        },
        decrement: function() {
          changeBy(-1);
        },
        value: function() {
          return privateCounter;
        }
    }   
}

閉包的缺點(diǎn)
由上文可知閉包的作用可以使數(shù)據(jù)保存在內(nèi)存中。當(dāng)濫用閉包,也會(huì)導(dǎo)致內(nèi)存占用過(guò)多,影響性能

解決閉包的問(wèn)題
當(dāng)你已經(jīng)確定某些數(shù)據(jù)不會(huì)再被調(diào)用時(shí),可以把閉包刪除或者設(shè)為null

總結(jié)
當(dāng)一個(gè)函數(shù)能夠記住并訪問(wèn)到其所在的詞法作用域及作用域鏈,特別強(qiáng)調(diào)是在其定義的作用域外進(jìn)行的訪問(wèn),此時(shí)該函數(shù)和其上層執(zhí)行上下文共同構(gòu)成閉包

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

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

相關(guān)文章

  • js中函數(shù)聲明與函數(shù)表達(dá)式的區(qū)別以及立即執(zhí)行函數(shù)

    摘要:最近在寫(xiě)代碼時(shí)遇到了閉包,其中閉包又和立即執(zhí)行函數(shù)有點(diǎn)關(guān)系,于是牽扯除了函數(shù)聲明以及函數(shù)表達(dá)式,我感覺(jué)中文的很多文章寫(xiě)的不太好,查閱了的指南和這篇關(guān)于的文章,覺(jué)得寫(xiě)的很好,整合一下。函數(shù)聲明和函數(shù)表達(dá)式。 最近在寫(xiě)代碼時(shí)遇到了閉包,其中閉包又和立即執(zhí)行函數(shù)(immediately invoked function expression, aka IIFE)有點(diǎn)關(guān)系,于是牽扯除了函數(shù)聲明...

    madthumb 評(píng)論0 收藏0
  • js 閉包

    摘要:但,這還不是閉包。通過(guò)訪問(wèn)外部變量,一個(gè)閉包可以維持這些變量。閉包經(jīng)常用于創(chuàng)建含有隱藏?cái)?shù)據(jù)的函數(shù)但并不總是這樣。有人說(shuō)應(yīng)該在文章結(jié)尾對(duì)閉包進(jìn)行總結(jié),可惜小弟才疏學(xué)淺,不能給出一個(gè)精辟的總結(jié)。 越來(lái)越覺(jué)得國(guó)內(nèi)沒(méi)有教書(shū)育人的氛圍,為了弄懂JS的閉包,我使出了我英語(yǔ)四級(jí)吃奶的勁去google上搜尋著有關(guān)閉包的解釋,當(dāng)我看到stackoverflow上這一篇解答,我腦中就出現(xiàn)了一句話:就是這貨...

    keelii 評(píng)論0 收藏0
  • 分享一個(gè)關(guān)于匿名函數(shù)和閉包的問(wèn)答

    摘要:引用一個(gè)的提問(wèn)個(gè)人覺(jué)得總結(jié)的比較好的兩句話原文地址另外,附上中對(duì)閉包的講解閉包中文對(duì)于閉包的簡(jiǎn)要概括原文原文地址匿名函數(shù)和閉包來(lái)自文章作者版權(quán)聲明自由轉(zhuǎn)載非商用非衍生保持署名創(chuàng)意共享許可證轉(zhuǎn)載請(qǐng)注明出處 引用一個(gè)stackoverflow的提問(wèn) 個(gè)人覺(jué)得總結(jié)的比較好的兩句話: An anonymous function is just a function that has no na...

    Barrior 評(píng)論0 收藏0
  • 關(guān)于JS函數(shù)的bind

    摘要:昨天被人問(wèn)到的的作用是什么這個(gè)倒還能回答出來(lái),之后返回一個(gè)新的函數(shù),這個(gè)函數(shù)可以保持傳遞的上下文。沒(méi)有完全實(shí)現(xiàn)規(guī)定的。比如規(guī)定了的和行為。 https://friskfly.github.io/2016/03/24/about-function-bind-in-js/ 昨天被人問(wèn)到j(luò)s的bind的作用是什么? 這個(gè)倒還能回答出來(lái),bind 之后返回一個(gè)新的函數(shù),這個(gè)函數(shù)可以保持傳遞的t...

    CloudwiseAPM 評(píng)論0 收藏0
  • js 閉包的使用技巧

    摘要:閉包的學(xué)術(shù)定義先來(lái)參考下各大權(quán)威對(duì)閉包的學(xué)術(shù)定義百科閉包,又稱詞法閉包或函數(shù)閉包,是引用了自由變量的函數(shù)。所以,有另一種說(shuō)法認(rèn)為閉包是由函數(shù)和與其相關(guān)的引用環(huán)境組合而成的實(shí)體。 前言 上一章講解了閉包的底層實(shí)現(xiàn)細(xì)節(jié),我想大家對(duì)閉包的概念應(yīng)該也有了個(gè)大概印象,但是真要用簡(jiǎn)短的幾句話來(lái)說(shuō)清楚,這還真不是件容易的事。這里我們就來(lái)總結(jié)提煉下閉包的概念,以應(yīng)付那些非專人士的心血來(lái)潮。 閉包的學(xué)術(shù)...

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

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

0條評(píng)論

閱讀需要支付1元查看
<