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

資訊專欄INFORMATION COLUMN

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

caige / 2580人閱讀

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

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

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

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

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

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

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

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

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

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

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

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

最后我們再來看作用域鏈
下圖可以形象地表示上面例子的作用域鏈

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

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

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

相關(guān)文章

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

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

    lunaticf 評論0 收藏0
  • javaScript作用域與閉包

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

    Reducto 評論0 收藏0
  • 作用域與閉包

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

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

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

    aikin 評論0 收藏0
  • Javascript重溫OOP之作用域與閉包

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

    JessYanCoding 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<