閉包如何減少內存佔用?(接上篇)

本文基於《JavaScript高級程序設計》整理。

上篇解釋了閉包爲什麼會佔用過多的內存。這一篇來講如何使用閉包可以減少閉包對內存的佔用。

閉包的作用域鏈中包含了外部的包含函數的活動對象。

通過解除對匿名函數的引用,可以將匿名函數佔用的內存安全釋放。

function outerFun(outerArg){
    return function(){
        console.log('這裏是內部匿名函數')
        console.log('可以訪問包含函數的變量',outerArg)
    }
}
var create = outerFun("hi") //創建一個函數,是outerFun中返回的匿名函數
create() // 調用函數,是調用匿名函數
create = null // 釋放對匿名函數的引用 

那麼,如果沒有對匿名函數的引用,匿名函數執行完之後自動銷燬,就可以做到減少佔用內存的問題。

利用匿名函數,製造私有作用域(塊級作用域),這樣匿名函數執行完之後可以將引用的活動對象銷燬。

// 匿名函數 模仿 塊級作用域
(function(){
    // 此處爲塊級作用域
    // 這裏面的變量都會在函數執行完之後釋放內存
})()

比如: 

function outputNumbers(count){
    // 不用return function,不能引用內部的匿名函數
    // 匿名函數立即執行
    (function(){
        for(var i = 0; i < count; i++){
            console.log(i)
        }
    })() 
    console.log(i) // 出錯,因爲函數執行完後i變量已銷燬
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章