一、什么是内存泄露?内存泄漏是指一块被分配的内存既不能使用,又不能回收,直到浏览器进程结束。
二、会造成内存泄露的操作有哪些?1、意外的全局变量:function foo(){a = "我不会被回收!" //此时a会是一个全局变量,不会被回收;}
2、不当的闭包引起的内存泄漏。闭包可以维持函数内的局部变量,使其得不到释放。
3、被遗忘的定时器或者回调;[align=start]
var someResouce=getData();
setInterval(function(){
var node=document.getElementById('Node');
if(node){
node.innerHTML=JSON.stringify(someResouce)
}
},1000)
如果 id 为 Node 的元素从 DOM 中移除, 该定时器仍会存在, 同时, 因为回调函数中包含对 someResource 的引用, 定时器外面的 someResource 也不会被释放。
4、没有清理的DOM元素引用
var elements={
button: document.getElementById("button"),
image: document.getElementById("image"),
text: document.getElementById("text")
};
function doStuff(){
image.src="http://some.url/image";
button.click():
console.log(text.innerHTML)
}
function removeButton(){
document.body.removeChild(document.getElementById('button'))
}