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

資訊專欄INFORMATION COLUMN

【闖關模式】作用域、鏈和閉包 下

firim / 964人閱讀

摘要:前言上篇闖關模式作用域鏈和閉包中任務四閉包閉包在中是很重要的概念,他們讓出色地完成異步任務。所以說,作用域,作用域鏈,閉包,垃圾回收機制,他們都是息息相關的你的任務你需要用的來檢驗垃圾回收機制的運行。

前言

上篇 【闖關模式】作用域、鏈和閉包 中

任務四 閉包(Closures)

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

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

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

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

someFunc()
 var bar
    ↑
    ?

有了嵌套作用域的知識,我們可以說inner()有權訪問bar:

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

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

為了回調式的編程,即使inner()不立即執行,閉包也會保持。在JS中將inner傳來傳去,或者稍后在someFunc()中返回出來也是可以的,而在這個過程中,bar將一直是可用的。

你的任務

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

完成后, 執行scope-chains-closures verify 來驗證你的答案

任務五 垃圾回收機制 (Garbage Collection)

在JS中,內存是被運行時環境(runtime)自動管理的。運行時環境決定了已用內存的釋放。而這個決策過程就稱之為 垃圾回收機制

每一個JS運行環境都有自己的垃圾回收機制的算法,但是大多數用的都類似:標記&清除算法,這個算法的原理即:
只標記活動代碼中可達的內存的引用(變量,函數等),任何引用只要沒有被標記,就會被垃圾回收掉(即該塊內存被釋放掉)

而這個標記可達內存的概念也一定程度上和閉包有關:

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

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

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

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

所以說,作用域,作用域鏈,閉包,垃圾回收機制,他們都是息息相關的!

你的任務

你需要用Chrome的DevTools來檢驗垃圾回收機制的運行。按以下的步驟來感受一下垃圾回收:

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

有趣的事情是,GC的耗時:一般遠遠超過16ms(這個能保持60fps的最大值)。同時當GC發生時會阻塞主線程,所以如果你的程序很卡,就可能是大量GC惹的禍。

Note: 你如果有強迫癥,也可以繼續運行 scope-chain-closures verify

翻譯倉促,如有錯誤歡迎指出!點贊更好哦~

附錄

闖關項目地址

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/79137.html

相關文章

  • 闖關模式作用鏈和閉包

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

    shinezejian 評論0 收藏0
  • 闖關模式作用鏈和閉包

    摘要:前言上篇闖關模式作用域鏈和閉包上任務三全局作用域和變量遮蔽全局作用域理解作用域鏈在哪結束很重要所有的運行時環境都必須隱式創建一個全局作用域對象瀏覽器中是,中是,這個對象就位于作用域鏈的頂端在任務一中,我們忽略了一個細節,即當不使用或者等定義 前言 上篇:【闖關模式】作用域、鏈和閉包 上 任務三 Global Scope & Shadowing 全局作用域和變量遮蔽 全局作用域(Glob...

    airborne007 評論0 收藏0
  • JavaScript 闖關

    摘要:對象數組初始化表達式,闖關記之上文檔對象模型是針對和文檔的一個。闖關記之數組數組是值的有序集合。數組是動態的,根闖關記之語法的語法大量借鑒了及其他類語言如和的語法。 《JavaScript 闖關記》之 DOM(下) Element 類型 除了 Document 類型之外,Element 類型就要算是 Web 編程中最常用的類型了。Element 類型用于表現 XML 或 HTML 元素...

    mj 評論0 收藏0
  • 《JavaScript 闖關記》之作用閉包

    摘要:作用域和閉包是最重要的概念之一,想要進一步學習,就必須理解作用域和閉包的工作原理。全局和局部作用域的關系在函數體內,局部變量的優先級高于同名的全局變量。作用域鏈的用途,是保證對執行環境有權訪問的所有變量和函數的有序訪問。 作用域和閉包是 JavaScript 最重要的概念之一,想要進一步學習 JavaScript,就必須理解 JavaScript 作用域和閉包的工作原理。 作用域 任何...

    Jacendfeng 評論0 收藏0
  • js知識梳理6:關于函數的要點梳理(2)(作用鏈和閉包)

    摘要:在此例中,在匿名函數被返回后,它的作用域鏈初始化為包含函數的活動對象和全局變量對象。函數在執行完畢后,其活動對象也不會被銷毀,因為匿名函數的作用域鏈仍然在引用這個活動對象,結果就是只是的執行環境的作用域鏈會被銷毀,其活動對象會留在內存中。 寫在前面 注:這個系列是本人對js知識的一些梳理,其中不少內容來自書籍:Javascript高級程序設計第三版和JavaScript權威指南第六版,...

    aristark 評論0 收藏0

發表評論

0條評論

firim

|高級講師

TA的文章

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