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
。