銷毀閉包

先來看一個(gè)閉包的例子:

function assignHandler () {
  var element = document.getElementById("someElement");
  element.onclick = function () {
    alert(element.id);
  }
}

根據(jù)瀏覽器垃圾回收機(jī)制中的引用計(jì)數(shù)策略可知,這里的引用類型 someElement 被賦值給了變量 element,而 element 變量又被事件處理函數(shù)引用,dom 對象的引用計(jì)數(shù)是 2,這樣就形成了循環(huán)引用,當(dāng)事件處理函數(shù)被多次調(diào)用時(shí),就會(huì)導(dǎo)致大量內(nèi)存無法被回收。

引用計(jì)數(shù)的含義是,跟蹤記錄每個(gè)值被引用的次數(shù)。當(dāng)聲明一個(gè)變量并將一個(gè)引用類型的值賦給該變量時(shí),這個(gè)值的引用次數(shù)就是1,如果這個(gè)值再被賦值給另一個(gè)變量,則引用次數(shù)加1。相反,如果一個(gè)變量脫離了該值的引用,則該值引用次數(shù)減1,當(dāng)次數(shù)為0時(shí),就會(huì)等待垃圾收集器的回收。

在前端性能優(yōu)化中,我們通常將不再需要的變量置空,讓瀏覽器垃圾回收機(jī)制回收,避免占內(nèi)存。這里也可以通過將變量設(shè)置為 null,來清除循環(huán)引用。

window.onload = function () {
    var element = document.getElementById("someElement");
    var id = element .id;
    element .onclick = function () {
        alert(id); 
    }
    element = null;
}

.


【1】《JavaScript高級程序設(shè)計(jì)》
p80
p184

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容