內存溢出與內存泄露
一、內存溢出
- 一種程序運行出現的錯誤。
- 當程序運行需要的內存超過了剩餘的內存時, 就出拋出內存溢出的錯誤。
二、內存泄漏
- 佔用的內存沒有及時釋放。
- 內存泄露積累多了就容易導致內存溢出。
-
常見的內存泄露:
- 意外的全局變量。
- 沒有及時清理的計時器或回調函數。
- 閉包
// 1. 內存溢出
var obj = {}
for (var i = 0; i < 10000; i++) {
obj[i] = new Array(10000000)
console.log('-----')
}
// 2. 內存泄露
// 意外的全局變量,沒有加var
function fn() {
a = new Array(10000000)
console.log(a)
}
fn()
// 3. 沒有及時清理的計時器或回調函數
var intervalId = setInterval(function () { //啓動循環定時器後不清理
console.log('----')
}, 1000)
// clearInterval(intervalId)
// 4. 閉包
function fn1() {
var a = 4
function fn2() {
console.log(++a)
}
return fn2
}
var f = fn1()
f()
// f = null