JS內存泄露的4種方式

1:意外的全局變量

JavaScript 處理未定義變量的方式比較寬鬆:未定義的變量會在全局對象創建一個新變量。在瀏覽器中,全局對象是 window 。

function foo(arg) { 
    bar = "this is a hidden global variable"; 
} 

等價於

function foo(arg) { 
    window.bar = "this is an explicit global variable"; 
} 

函數 foo 內部忘記使用 var ,意外創建了一個全局變量。此例泄露了一個簡單的字符串,無傷大雅,但是有更糟的情況。

另一種意外的全局變量可能由 this 創建:

function foo() { 
    this.variable = "potential accidental global"; 
} 
 
// Foo 調用自己,this 指向了全局對象(window) 
// 而不是 undefined 
foo(); 

在 JavaScript 文件頭部加上 'use strict',可以避免此類錯誤發生。啓用嚴格模式解析 JavaScript ,避免意外的全局變量。

全局變量注意事項

儘管我們討論了一些意外的全局變量,但是仍有一些明確的全局變量產生的垃圾。它們被定義爲不可回收(除非定義爲空或重新分配)。尤其當全局變量用於 臨時存儲和處理大量信息時,需要多加小心。如果必須使用全局變量存儲大量數據時,確保用完以後把它設置爲 null 或者重新定義。與全局變量相關的增加內存消耗的一個主因是緩存。緩存數據是爲了重用,緩存必須有一個大小上限纔有用。高內存消耗導致緩存突破上限,因爲緩 存內容無法被回收。

2:被遺忘的計時器或回調函數

https://blog.csdn.net/qappleh/article/details/80337630

3.脫離Dom節點的引用

4.閉包

 

Chrome 內存剖析工具概覽

Chrome 提供了一套很棒的檢測 JavaScript 內存佔用的工具。與內存相關的兩個重要的工具:timeline 和 profiles

發佈了49 篇原創文章 · 獲贊 19 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章