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

資訊專欄INFORMATION COLUMN

【js】what is 閉包

Godtoy / 968人閱讀

摘要:什么是閉包給出的官方回答是閉包是由函數(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í)所能訪問的所有局部變量

看代碼

//一個(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)被銷毀,但是變量b仍然能夠訪問到它里面的變量。
這就是閉包的核心。當(dāng)函數(shù)執(zhí)行完后,被作為返回值函數(shù)保留在了作用域中。以至于里面的數(shù)據(jù)沒有被銷毀,仍然可以訪問到。
閉包還有一個(gè)作用是模擬私有方法和變量。要知道,js是不支持定義私有方法和變量的。
通過這個(gè)類作為對(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)存占用過多,影響性能

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

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

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

0條評(píng)論

閱讀需要支付1元查看
<