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

資訊專欄INFORMATION COLUMN

作用域與閉包的學(xué)習(xí)

caige / 2637人閱讀

摘要:閉包,一言以蔽之,就是函數(shù)和作用域鏈,通俗點(diǎn)就是函數(shù)內(nèi)部使用了外面定義的變量。內(nèi)部環(huán)境可以通過作用域鏈訪問所有的外部環(huán)境,但外部環(huán)境不能訪問內(nèi)部環(huán)境的任何變量或函數(shù)。

閉包,一言以蔽之,就是函數(shù)和作用域鏈,通俗點(diǎn)就是函數(shù)內(nèi)部使用了外面定義的變量。
我們從一個(gè)例子說起:

function foo(){
    var a = 2;
    var b = 3;
    return function bar(){
        console.log(a+b);
    }
}
var baz = foo();
baz();

最后的結(jié)果,控制臺(tái)會(huì)輸出a+b的值,也就是5。
在這段代碼里,出現(xiàn)了閉包,bar()就是函數(shù),bar引用了外面定義的變量a和b。
那么作用域鏈又是什么呢?
來個(gè)官方解釋:(紅寶書)

當(dāng)代碼在一個(gè)環(huán)境中執(zhí)行時(shí),會(huì)創(chuàng)建變量對(duì)象的一個(gè)作用域鏈。它的作用是保證對(duì)執(zhí)行環(huán)境有權(quán)訪問的所有變量和函數(shù)的有序訪問。它的前端始終都是當(dāng)前執(zhí)行代碼所在環(huán)境的變量對(duì)象。

這些東西看起來好像很難理解。我們先從執(zhí)行環(huán)境這個(gè)概念開始解釋。

執(zhí)行環(huán)境(有時(shí)也稱作環(huán)境)定義了變量或函數(shù)有權(quán)訪問的其他數(shù)據(jù),決定了它們各自的行為。

比如說上面的例子中,共有三個(gè)執(zhí)行環(huán)境:

全局環(huán)境,有一個(gè)函數(shù)foo和一個(gè)變量baz。

foo的局部環(huán)境,有兩個(gè)變量a和b和一個(gè)函數(shù)bar。

bar的局部環(huán)境。

bar的局部環(huán)境中,沒有變量,但是它可以訪問foo的局部環(huán)境中的變量a和b。
但是在全局環(huán)境中不能直接訪問foo的局部環(huán)境中的變量a和b。因?yàn)槿汁h(huán)境是foo局部環(huán)境的父執(zhí)行環(huán)境。

最后我們?cè)賮砜醋饔糜蜴?br>下圖可以形象地表示上面例子的作用域鏈

圖中的矩形表示特定的執(zhí)行環(huán)境。內(nèi)部環(huán)境可以通過作用域鏈訪問所有的外部環(huán)境,但外部環(huán)境不能訪問內(nèi)部環(huán)境的任何變量或函數(shù)。這些環(huán)境之間是有次序的。每個(gè)環(huán)境可以向外搜索,但反之不行。

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

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

相關(guān)文章

  • 小菊花課堂之JavaScript作用域與閉包

    摘要:而閉包卻能阻止這件事情發(fā)生。由于的聲明位置使它擁有涵蓋內(nèi)部作用域的閉包,使得該作用域能夠一直存在,以供在之后進(jìn)行引用。到這里,小菊花課堂之閉包的內(nèi)容就告一段落啦,感謝各位能耐心看到這里。 由于前段時(shí)間項(xiàng)目沒有那么忙,然后我這人一天不看點(diǎn)啥就非常焦慮,于是二刷《你不知道的JavaScript》,現(xiàn)在讀到閉包,想著看完這一章節(jié),寫點(diǎn)東西也是挺好的,所以有了下面的內(nèi)容,如有不對(duì)的地方,敬請(qǐng)斧...

    lunaticf 評(píng)論0 收藏0
  • javaScript作用域與閉包

    摘要:閉包里面保存的變量只有被方法引用了的變量這個(gè)例子里,閉包里只有并沒有。那最后來說說的問題閉包到底是什么閉包是一個(gè)作用域。鑒于在的調(diào)試窗口,是放在下面的那閉包這個(gè)作用域是個(gè)什么范圍被后代方法子方法,孫子方法。。。 首先給js的作用域這個(gè)話題打標(biāo)簽:2,var, 全局變量,局部變量,函數(shù),undefined, 作用域提升,賦值不會(huì)提升,ReferenceError, 同名覆蓋。打完標(biāo)簽之后...

    Reducto 評(píng)論0 收藏0
  • 作用域與閉包

    摘要:依然持有對(duì)該作用域的引用,而這個(gè)引用就叫作閉包。無(wú)論通過何種手段將內(nèi)部函數(shù)傳遞到所在的詞法作用域以外,它都會(huì)持有對(duì)原始定義作用域的引用,無(wú)論在何處執(zhí)行這個(gè)函數(shù)都會(huì)使用閉包。 因?yàn)樽罱?xiàng)目比較少,閑來覺得需要學(xué)習(xí)《你不知道的JavaScript》;跟大家分享一下; 什么是作用域 需要一套設(shè)計(jì)良好的規(guī)則來存儲(chǔ)變量,并且之后可以方便地找到這些變量。這套規(guī)則被稱為作用域 執(zhí)行 var a = ...

    shery 評(píng)論0 收藏0
  • 前端基礎(chǔ)進(jìn)階(四):詳細(xì)圖解作用域鏈與閉包

    摘要:之前一篇文章我們?cè)敿?xì)說明了變量對(duì)象,而這里,我們將詳細(xì)說明作用域鏈。而的作用域鏈,則同時(shí)包含了這三個(gè)變量對(duì)象,所以的執(zhí)行上下文可如下表示。下圖展示了閉包的作用域鏈。其中為當(dāng)前的函數(shù)調(diào)用棧,為當(dāng)前正在被執(zhí)行的函數(shù)的作用域鏈,為當(dāng)前的局部變量。 showImg(https://segmentfault.com/img/remote/1460000008329355);初學(xué)JavaScrip...

    aikin 評(píng)論0 收藏0
  • Javascript重溫OOP之作用域與閉包

    摘要:的變量作用域是基于其特有的作用域鏈的。需要注意的是,用創(chuàng)建的函數(shù),其作用域指向全局作用域。所以,有另一種說法認(rèn)為閉包是由函數(shù)和與其相關(guān)的引用環(huán)境組合而成的實(shí)體。 作用域 定義 在編程語(yǔ)言中,作用域控制著變量與參數(shù)的可見性及生命周期,它能減少名稱沖突,而且提供了自動(dòng)內(nèi)存管理 --javascript 語(yǔ)言精粹 我理解的是,一個(gè)變量、函數(shù)或者成員可以在代碼中訪問到的范圍。 js的變量作...

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

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

0條評(píng)論

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