1.什么是内存泄露
内存泄露是指一块被分配的内存既不能使用又不能回收,直到浏览器进程结束。
常见的内存泄露
1.意外使用全局变量或函数内部使用全局变量
eg:意外使用全局变量或函数内部使用全局变量
function Example(arg){
bar ="this is xixi"
}或
function Example2() {
this.visible=true
}
foo2() //调用后this指向window全局变量
2.定时器,定时器不清除,一直占用内存,得不到释放,或者在定时器内部调用外部函数,不能释放。
3.闭包内部函数应用外部函数变量得不到释放.
function bindEvent() {
var obj = document.createElement('XXX');
var unused = function () {
console.log(obj, '闭包内引用obj obj不会被释放');
};
obj = null; // 解决方法
}
4.dom元素的操作
const refA = document.getElementById('refA');
document.body.removeChild(refA); // dom删除了
console.log(refA, 'refA'); // 但是还存在引用能console出整个div 没有被回收
refA = null;
console.log(refA, 'refA'); // 解除引用
5.当页面的元素移除和替换时,若元素绑定的时间没有移除,会造成内存泄露
var btn = document.getElementById("myBtn");
btn.onclick = function(){
btn.onclick = null; //解决方案
document.getElementById("myDiv").innerHTML = "Processing...";
}
6.自动类型的装箱转换 (string类型没有length)
var s="lalala";
alert(new String(s).length); //解决方法