前端通过设置变量为null来触发GC。
前端导致内存泄漏的问题:
1、不小心往window添加属性
function foo(arg) {
bar = "test";
}
foo()
function foo1() {
this.variable = "test";
}
// foo 调用自己,this 指向了全局对象(window)
foo1();
2、闭包,维持函数内局部变量,使其得不到释放
function bindEvent() {
var obj = document.createElement('XXX');
var unused = function () {
console.log(obj, '闭包内引用obj obj不会被释放');
};
obj = null; // 解决方法
}
3、没有清理对DOM元素的引用同样造成内存泄露
const refA = document.getElementById('refA');
document.body.removeChild(refA); // dom删除了
console.log(refA, 'refA'); // 但是还存在引用能console出整个div 没有被回收
refA = null;
console.log(refA, 'refA'); // 解除引用
包括使用事件监听addEventListener监听的时候,在不监听的情况下使用removeEventListener取消对事件监听