js之閉包和作用域鏈及垃圾回收講解
閉包:
概念:閉包就是能夠讀取其他函式內部變數的函式。
(有權訪問另一個函式作用域中的變數的函式。)
(就是拿到本不該屬於他的東西)
作用:閉包可以用在許多地方。它的最大用處有兩個,一個是可以讀取函式內部的變數,另一個就是讓這些變數的值始終保持在記憶體中。
注意:由於閉包會使得函式中的變數都被儲存在記憶體中,記憶體消耗很大,所以不能濫用閉包,否則會造成網頁的效能問題,在IE中可能導致記憶體洩露。
作用域鏈
概念:在一個函式中巢狀多個函式,並且各自定義的相同的變數名,當函式訪問變數時,就形成了作用域鏈。
查詢順序:從當前函式開始查詢,如果沒有找到,向上一級函式開始查詢,直到找到為止,如果一直沒有找到,則說明該變數未定義。
小結;作用域鏈明確表示:在變數解析過程中首先查詢區域性作用域,然後查詢上層作用域
垃圾回收
有兩種策略來實現垃圾回收:標記清除 和 引用計數;
標記清除:垃圾收集器在執行的時候會給儲存在記憶體中的所有變數都加上標記,然後,它會去掉環境中的變數的標記和被環境中的變數引用的
變數的標記,此後,如果變數再被標記則表示此變數準備被刪除。 2008年為止,IE,Firefox,opera,chrome,Safari的javascript都
用使用了該方式;
引用計數:跟蹤記錄每個值被引用的次數,當宣告一個變數並將一個引用型別的值賦給該變數時,這個值的引用次數就是1,如果這個值再被賦值
給另一個變數,則引用次數加1。相反,如果一個變數脫離了該值的引用,則該值引用次數減1,當次數為0時,就會等待垃圾收集器的回收
相關文章
- 作用域、作用域鏈及閉包(一)
- JS 底蘊之 變數、作用域和垃圾回收JS變數
- 從 JS 編譯原理到作用域(鏈)及閉包JS編譯原理
- 淺談JS作用域、this及閉包JS
- 原型、原型鏈、作用域、作用域鏈、閉包原型
- 【JS基礎】作用域和閉包JS
- 原型模式故事鏈(5)--JS變數作用域、作用域鏈、閉包原型模式JS變數
- JS 事件迴圈,閉包,作用域鏈題JS事件
- JS作用域與閉包JS
- JS閉包作用域解析JS
- js--閉包與垃圾回收機制JS
- 圖解作用域及閉包圖解
- js的作用域和作用域鏈JS
- JS基礎總結(3)——作用域和閉包JS
- JavaScript之作用域和閉包JavaScript
- 面試-JS基礎知識-作用域和閉包、this面試JS
- 【機制】js的閉包、執行上下文、作用域鏈JS
- 閉包作用域
- 夯實基礎中篇-圖解作用域鏈和閉包圖解
- 你不懂的JS學習筆記(作用域和閉包)JS筆記
- 深入學習作用域和閉包—全面(JS系列之二)JS
- javascript 基礎(作用域和閉包)JavaScript
- 作用域及作用域鏈
- js的作用域、作用域鏈JS
- 深入理解執行上下文、作用域鏈和閉包
- 用垃圾回收機制解釋JavaScript中的閉包JavaScript
- JavaScript物件導向~ 作用域和閉包JavaScript物件
- js的作用域與作用域鏈JS
- JS專題之垃圾回收JS
- Javascript-this/作用域/閉包JavaScript
- js基礎梳理-如何理解作用域和作用域鏈?JS
- 深入學習js之——作用域鏈#5JS
- JS 總結之函式、作用域鏈JS函式
- JavaScript進階教程(5)-一文讓你搞懂作用域鏈和閉包JavaScript
- 對js中執行環境、作用域和作用域鏈的理解JS
- 從【預編譯】到【宣告提升】到【作用域鏈】再到【閉包】編譯
- Javascript深入之作用域與閉包JavaScript
- js中,函式的閉包、作用域跟[[Scopes]]的關係JS函式