1、什麼是記憶體洩漏?
占用的記憶體沒有及時釋放,記憶體洩漏積累多了容易導緻記憶體溢出
2、常見的記憶體洩漏及解決方法
意外的全局變量;沒有及時清理的計時器或者回調函數,閉包等
全局變量引起的記憶體洩漏
function fn(){
a = 10; // a 是全局變量,當函數執行完後并不會自動釋放記憶體
console.log(a);
}
fn();
console.log(a);
計時器未結束引起的記憶體洩漏
// 計時器沒有定義結束條件,會一直無限執行
setInterval(function fn(){
console.log("aaaaaa");
},1000);
// 正确做法
var stop = setInterval(function fn(){
console.log("aaaaaa");
},1000);
clearInterval(stop); // 結束定時器
閉包引起的記憶體洩漏
解決方法:
讓内部函數變成垃圾對象,指派為null,及時釋放,讓浏覽器回收閉包。
function fun(){
var a = 10;
function f1(){
console.log(++a);
}
return f1;
}
var f = fun();
f();
// 由于閉包是會一直引用着函數内的局部變量,是以閉包内的變量并不會被浏覽器所釋放,導緻記憶體一直被占用着