內存溢出:是一種程序運行時出現的錯誤;當程序運行時需要的內存超過了剩余的內存時,就會拋出內存溢出的錯誤。
var obj = {}
for(let i = 0;i < 1000000;i++){
obj[i] = new Array(1000000)
}
個人理解:內存溢出是最終結果,即使沒有編寫內存泄露的代碼也有可能造成內存溢出
內存泄漏:占用的內存沒有及時釋放,內存泄漏積累多了就容易導致內存溢出。
常見的內存泄漏
- 意外的全局變量
function fn(){
a = 10
console.log(a)
}
fn()
for(let i = 0;i < 10;i++){
window[i] = i
}
- 沒有及時清理的定時器
var timer = setInterval(() => {
console.log('----')
}, 1000)
timer = null //沒有及時清理的定時器
- 閉包
function fn1() {
var arr = new Array[100000];
function fn2() {
console.log(arr.length)
}
return fn2;
}
var f = fn1();
f();
f = null // 讓內部函數成為垃圾對象,釋放閉包
- 事件綁定
function fn() {
var zjy = document.getElementById('zjy');
zjy.onclick = function () {
alert(zjy.innerHTML);
};
zjy = null; //解除引用,等待垃圾回收
alert(zjy); //null,說明已經不存在了
}
fn();
- 事件監聽
function fn(){
console.log('zjy')
}
let zjy = document.getElementById('zjy');
zjy.addEventListener('click',fn)
zjy.removeEventListener(fn)
