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

資訊專欄INFORMATION COLUMN

JS閉包

ACb0y / 788人閱讀

摘要:閉包是什么首先,放一個(gè)概念函數(shù)加函數(shù)內(nèi)部能訪問到的局部變量就組成了一個(gè)閉包那閉包又有什么作用呢閉包常常用來間接訪問一個(gè)變量。其實(shí)這是翻譯問題,閉包的原文是,跟包沒有任何關(guān)系。所以函數(shù)套函數(shù)只是為了造出一個(gè)局部變量,跟閉包無關(guān)。

JS閉包是什么?

首先,放一個(gè)概念:

函數(shù) 加 函數(shù)內(nèi)部能訪問到的局部變量 就組成了一個(gè)閉包

那閉包又有什么作用呢?

閉包常常用來「間接訪問一個(gè)變量」。換句話說,「隱藏一個(gè)變量」。

通常做法是 暴露一個(gè)訪問器(函數(shù)),讓別人可以「間接訪問」那個(gè)變量。

有這樣一段代碼:

var i = "i am in windows"

var test = function(){

     var a = 0;

      var  b = function(){ 

           console.log(a)

       }

       return b

}

很明顯 a 是 test 這個(gè)函數(shù)對(duì)象內(nèi)的局部變量 而在其內(nèi)部 b 又引用了這個(gè)對(duì)象a 這就是一個(gè)閉包

a變量 和 b 函數(shù)對(duì)象組成了一個(gè)閉包

那為什么要test函數(shù)里要再套一個(gè)b函數(shù)呢?

是因?yàn)樾枰植孔兞?,所以才?a 放在一個(gè)函數(shù)里,如果不把 a 放在一個(gè)函數(shù)里,a 就是一個(gè)全局變量了,達(dá)不到使用閉包的目的——隱藏變量。

有些人看到「閉包」這個(gè)名字,就一定覺得要用什么包起來才行。其實(shí)這是翻譯問題,閉包的原文是 Closure,跟「包」沒有任何關(guān)系。

所以函數(shù)套函數(shù)只是為了造出一個(gè)局部變量,跟閉包無關(guān)。

那為什么又要 return b 呢?

因?yàn)槿绻?return,你就無法使用這個(gè)閉包。return b 的目的只是讓外面可以訪問到這個(gè) b 函數(shù)。

所以 return b 只是為了 b 能被使用,也跟閉包無關(guān)。

下面看下 閉包的廬山真面目:

看到了嗎 function scope 里面出現(xiàn)了Closure 和 Global

Closure里有 a 變量的值 也就是 0

那么我們是否可以猜測(cè) 我們?cè)谑仔卸x的全局變量 i 是不是就在Global這個(gè) function scope 里面?

驗(yàn)證下

全局變量 i 確實(shí)就在 Global里面

其實(shí),function scope內(nèi)默認(rèn)有個(gè)名為 Globe 的全局引用(有了這個(gè)引用,就可以直接調(diào)用 Globe 的屬性或方法)

而在Closure里的變量或方法 外部是無法直接訪問的

這就是 隱藏 了一個(gè)變量

by 潘小閑

參考資料:JS中的閉包是什么

同步github

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

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

相關(guān)文章

  • JS 中的閉包是什么?

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

    Enlightenment 評(píng)論0 收藏0
  • js閉包的本質(zhì)

    摘要:也正因?yàn)檫@個(gè)閉包的特性,閉包函數(shù)可以讓父函數(shù)的數(shù)據(jù)一直駐留在內(nèi)存中保存,從而這也是后來模塊化的基礎(chǔ)。只有閉包函數(shù),可以讓它的父函數(shù)作用域永恒,像全局作用域,一直在內(nèi)存中存在。的本質(zhì)就是如此,每個(gè)模塊文件就是一個(gè)大閉包。 為什么會(huì)有閉包 js之所以會(huì)有閉包,是因?yàn)閖s不同于其他規(guī)范的語言,js允許一個(gè)函數(shù)中再嵌套子函數(shù),正是因?yàn)檫@種允許函數(shù)嵌套,導(dǎo)致js出現(xiàn)了所謂閉包。 function...

    qianfeng 評(píng)論0 收藏0
  • 談?wù)勎宜斫獾?em>閉包,js、php、golang里的closure

    摘要:當(dāng)初看這個(gè)解釋有點(diǎn)懵逼,理解成閉包就是函數(shù)中的函數(shù)了。里的閉包最近不滿足于只干前端的活,開始用起了。里的閉包最近在學(xué)習(xí)語言,讓我們來看一下語言里的閉包。在中,閉包特指將函數(shù)作為值返回的情況,被返回的函數(shù)引用了生成它的母函數(shù)中的變量。 本人開始接觸編程是從js開始的,當(dāng)時(shí)網(wǎng)上很多人說閉包是難點(diǎn),各種地方對(duì)閉包的解釋也是千奇百怪。如今開始接觸js以外的各種編程語言,發(fā)現(xiàn)不光是js,php、...

    betacat 評(píng)論0 收藏0
  • 談?wù)勎宜斫獾?em>閉包,js、php、golang里的closure

    摘要:當(dāng)初看這個(gè)解釋有點(diǎn)懵逼,理解成閉包就是函數(shù)中的函數(shù)了。里的閉包最近不滿足于只干前端的活,開始用起了。里的閉包最近在學(xué)習(xí)語言,讓我們來看一下語言里的閉包。在中,閉包特指將函數(shù)作為值返回的情況,被返回的函數(shù)引用了生成它的母函數(shù)中的變量。 本人開始接觸編程是從js開始的,當(dāng)時(shí)網(wǎng)上很多人說閉包是難點(diǎn),各種地方對(duì)閉包的解釋也是千奇百怪。如今開始接觸js以外的各種編程語言,發(fā)現(xiàn)不光是js,php、...

    zhoutao 評(píng)論0 收藏0
  • 詳解js閉包

    摘要:但閉包的情況不同嵌套函數(shù)的閉包執(zhí)行后,,然后還在被回收閉包會(huì)使變量始終保存在內(nèi)存中,如果不當(dāng)使用會(huì)增大內(nèi)存消耗。每個(gè)函數(shù),不論多深,都可以認(rèn)為是全局的子作用域,可以理解為閉包。 閉包(closure)是Javascript語言的一個(gè)難點(diǎn),也是它的特色,很多高級(jí)應(yīng)用都要依靠閉包實(shí)現(xiàn)。 閉包的特性 閉包有三個(gè)特性: 1.函數(shù)嵌套函數(shù) 2.函數(shù)內(nèi)部可以引用外部的參數(shù)和變量 3.參數(shù)和變量不會(huì)...

    Chiclaim 評(píng)論0 收藏0
  • JS腳丫系列】重溫閉包

    摘要:內(nèi)部的稱為內(nèi)部函數(shù)或閉包函數(shù)。過度使用閉包會(huì)導(dǎo)致性能下降。,閉包函數(shù)分為定義時(shí),和運(yùn)行時(shí)。循環(huán)會(huì)先運(yùn)行完畢,此時(shí),閉包函數(shù)并沒有運(yùn)行。閉包只能取得外部函數(shù)中的最后一個(gè)值。事件綁定種的匿名函數(shù)也是閉包函數(shù)。而對(duì)象中的閉包函數(shù),指向。 閉包概念解釋: 閉包(也叫詞法閉包或者函數(shù)閉包)。 在一個(gè)函數(shù)parent內(nèi)聲明另一個(gè)函數(shù)child,形成了嵌套。函數(shù)child使用了函數(shù)parent的參數(shù)...

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

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

0條評(píng)論

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