js内存泄露的几种情况

313 阅读1分钟

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); //解决方法