国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【闖關(guān)模式】作用域、鏈和閉包 下

firim / 970人閱讀

摘要:前言上篇闖關(guān)模式作用域鏈和閉包中任務(wù)四閉包閉包在中是很重要的概念,他們讓出色地完成異步任務(wù)。所以說(shuō),作用域,作用域鏈,閉包,垃圾回收機(jī)制,他們都是息息相關(guān)的你的任務(wù)你需要用的來(lái)檢驗(yàn)垃圾回收機(jī)制的運(yùn)行。

前言

上篇 【闖關(guān)模式】作用域、鏈和閉包 中

任務(wù)四 閉包(Closures)

閉包在JS中是很重要的概念,他們讓JS出色地完成異步任務(wù)。

為了能更好的理解閉包,我們先來(lái)看作用域鏈的例子:

someFunc()
    ↑
    |
 inner()
    ↑
    |
  foo()

我們稱someFunc()聲明了一個(gè)變量bar:

someFunc()
 var bar
    ↑
    ?

有了嵌套作用域的知識(shí),我們可以說(shuō)inner()有權(quán)訪問(wèn)bar:

someFunc()
 var bar
    ↑
    |
 inner()
alert(bar)
    ↑
    ?

inner() 可以說(shuō) 包住了 bar. 所以 inner() 是一個(gè) 閉包 .

為了回調(diào)式的編程,即使inner()不立即執(zhí)行,閉包也會(huì)保持。在JS中將inner傳來(lái)傳去,或者稍后在someFunc()中返回出來(lái)也是可以的,而在這個(gè)過(guò)程中,bar將一直是可用的。

你的任務(wù)

修改之前的代碼,設(shè)置zip()中的bar = true,然后在foo()中將zip return出來(lái)。

完成后, 執(zhí)行scope-chains-closures verify 來(lái)驗(yàn)證你的答案

任務(wù)五 垃圾回收機(jī)制 (Garbage Collection)

在JS中,內(nèi)存是被運(yùn)行時(shí)環(huán)境(runtime)自動(dòng)管理的。運(yùn)行時(shí)環(huán)境決定了已用內(nèi)存的釋放。而這個(gè)決策過(guò)程就稱之為 垃圾回收機(jī)制

每一個(gè)JS運(yùn)行環(huán)境都有自己的垃圾回收機(jī)制的算法,但是大多數(shù)用的都類似:標(biāo)記&清除算法,這個(gè)算法的原理即:
只標(biāo)記活動(dòng)代碼中可達(dá)的內(nèi)存的引用(變量,函數(shù)等),任何引用只要沒有被標(biāo)記,就會(huì)被垃圾回收掉(即該塊內(nèi)存被釋放掉)

而這個(gè)標(biāo)記可達(dá)內(nèi)存的概念也一定程度上和閉包有關(guān):

 someFunc()
  var bar
return inner
     ↑
     |
  inner()
 alert(bar)
     ↑
     ?

當(dāng)閉包inner()someFunc()return掉,它仍然保持了對(duì)bar的引用,這時(shí)標(biāo)記&清除算法就會(huì)標(biāo)記bar可達(dá),因此bar也就不會(huì)被垃圾回收掉。

對(duì)inner()來(lái)說(shuō),為了能正確解析對(duì)bar的引用,不僅需要保持存放bar的這塊內(nèi)存,而且需要保持可以訪問(wèn)到bar的這條作用域鏈。

一旦對(duì)inner()的引用不再需要,就可以對(duì)其進(jìn)行垃圾回收了,這也意味著bar也可以被垃圾回收,最終整條作用域鏈都被回收掉,內(nèi)存被釋放。

所以說(shuō),作用域,作用域鏈,閉包,垃圾回收機(jī)制,他們都是息息相關(guān)的!

你的任務(wù)

你需要用Chrome的DevTools來(lái)檢驗(yàn)垃圾回收機(jī)制的運(yùn)行。按以下的步驟來(lái)感受一下垃圾回收:

1) 在Chrome中開一個(gè)tab
2) 打開DevTools > Timeline tab
3) 確保設(shè)置和下圖一致:
a) 取消選中 Frames View (allows seeing memory graphs)
b) 選中 Flame Chart View (allows seeing where execution time is spent)
c) 選項(xiàng)中只選擇 "Memory"
4) 點(diǎn)擊灰色圓形按鈕開始搜集數(shù)據(jù)
5) 隨便訪問(wèn)一個(gè)網(wǎng)站http://www.baidu.com
6) 點(diǎn)擊紅色的錄制按鈕停止搜集數(shù)據(jù)
7) 然后你家能看到類似下圖:
8) 我們要關(guān)注的是內(nèi)存突然減少的地方:
9) 選擇這部分突然減少的內(nèi)存
10) 看那個(gè)叫"GC Event"的黃色部分:
11) 然后就能看到回收的總內(nèi)存量和耗時(shí)

有趣的事情是,GC的耗時(shí):一般遠(yuǎn)遠(yuǎn)超過(guò)16ms(這個(gè)能保持60fps的最大值)。同時(shí)當(dāng)GC發(fā)生時(shí)會(huì)阻塞主線程,所以如果你的程序很卡,就可能是大量GC惹的禍。

Note: 你如果有強(qiáng)迫癥,也可以繼續(xù)運(yùn)行 scope-chain-closures verify

翻譯倉(cāng)促,如有錯(cuò)誤歡迎指出!點(diǎn)贊更好哦~

附錄

闖關(guān)項(xiàng)目地址

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/79137.html

相關(guān)文章

  • 闖關(guān)模式作用鏈和閉包

    摘要:前言這個(gè)系列是翻譯自中的直接闖關(guān)作用域鏈和閉包作用域,作用域鏈,閉包和垃圾回收機(jī)制都有一個(gè)共同點(diǎn)學(xué)了就忘閉包到底是干啥的啥時(shí)候發(fā)生垃圾回收機(jī)制作用域鏈到底是啥這個(gè)教程讓你發(fā)現(xiàn)這些都是小意思。 前言 這個(gè)系列是翻譯自 nodeschool.io中的 scope-chains-closures 直接闖關(guān): npm install -g scope-chains-closures scope...

    shinezejian 評(píng)論0 收藏0
  • 闖關(guān)模式作用鏈和閉包

    摘要:前言上篇闖關(guān)模式作用域鏈和閉包上任務(wù)三全局作用域和變量遮蔽全局作用域理解作用域鏈在哪結(jié)束很重要所有的運(yùn)行時(shí)環(huán)境都必須隱式創(chuàng)建一個(gè)全局作用域?qū)ο鬄g覽器中是,中是,這個(gè)對(duì)象就位于作用域鏈的頂端在任務(wù)一中,我們忽略了一個(gè)細(xì)節(jié),即當(dāng)不使用或者等定義 前言 上篇:【闖關(guān)模式】作用域、鏈和閉包 上 任務(wù)三 Global Scope & Shadowing 全局作用域和變量遮蔽 全局作用域(Glob...

    airborne007 評(píng)論0 收藏0
  • JavaScript 闖關(guān)

    摘要:對(duì)象數(shù)組初始化表達(dá)式,闖關(guān)記之上文檔對(duì)象模型是針對(duì)和文檔的一個(gè)。闖關(guān)記之?dāng)?shù)組數(shù)組是值的有序集合。數(shù)組是動(dòng)態(tài)的,根闖關(guān)記之語(yǔ)法的語(yǔ)法大量借鑒了及其他類語(yǔ)言如和的語(yǔ)法。 《JavaScript 闖關(guān)記》之 DOM(下) Element 類型 除了 Document 類型之外,Element 類型就要算是 Web 編程中最常用的類型了。Element 類型用于表現(xiàn) XML 或 HTML 元素...

    mj 評(píng)論0 收藏0
  • 《JavaScript 闖關(guān)記》之作用閉包

    摘要:作用域和閉包是最重要的概念之一,想要進(jìn)一步學(xué)習(xí),就必須理解作用域和閉包的工作原理。全局和局部作用域的關(guān)系在函數(shù)體內(nèi),局部變量的優(yōu)先級(jí)高于同名的全局變量。作用域鏈的用途,是保證對(duì)執(zhí)行環(huán)境有權(quán)訪問(wèn)的所有變量和函數(shù)的有序訪問(wèn)。 作用域和閉包是 JavaScript 最重要的概念之一,想要進(jìn)一步學(xué)習(xí) JavaScript,就必須理解 JavaScript 作用域和閉包的工作原理。 作用域 任何...

    Jacendfeng 評(píng)論0 收藏0
  • js知識(shí)梳理6:關(guān)于函數(shù)的要點(diǎn)梳理(2)(作用鏈和閉包)

    摘要:在此例中,在匿名函數(shù)被返回后,它的作用域鏈初始化為包含函數(shù)的活動(dòng)對(duì)象和全局變量對(duì)象。函數(shù)在執(zhí)行完畢后,其活動(dòng)對(duì)象也不會(huì)被銷毀,因?yàn)槟涿瘮?shù)的作用域鏈仍然在引用這個(gè)活動(dòng)對(duì)象,結(jié)果就是只是的執(zhí)行環(huán)境的作用域鏈會(huì)被銷毀,其活動(dòng)對(duì)象會(huì)留在內(nèi)存中。 寫在前面 注:這個(gè)系列是本人對(duì)js知識(shí)的一些梳理,其中不少內(nèi)容來(lái)自書籍:Javascript高級(jí)程序設(shè)計(jì)第三版和JavaScript權(quán)威指南第六版,...

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

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

0條評(píng)論

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