首页 > 其他 > 详细

哪些操作会造成内存泄露

时间:2021-04-28 22:21:29      阅读:26      评论:0      收藏:0      [点我收藏+]

1)意外的全局变量引起的内存泄露

function leak(){
leak= "xxx"; //leak成为一个全局变量,不会被回收
}

2)闭包引起的内存泄露

function bindEvent(){
var obj= document.createElement( "XXX");
obj.οnclick= function(){
//Even if it‘s a empty function
}
}

闭包可以维持函数内局部变量,使其得不到释放。 上例定义事件回调时,由于是函数内定义函数,并且内部函数--事件回调的引用外暴了,形成了闭包。

解决之道,将事件处理函数定义在外部,解除闭包,或者在定义事件处理函数的外部函数中,删除对dom的引用。

3)没有清理的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‘))
}

4)被遗忘的定时器或者回调

var someResouce=getData();
setInterval( function(){
var node= document.getElementById( ‘Node‘);
if(node){
node.innerHTML= JSON.stringify(someResouce)
}
}, 1000)

6、怎样避免内存泄露

1)减少不必要的全局变量,或者生命周期较长的对象,及时对无用的数据进行垃圾回收;

2)注意程序逻辑,避免“死循环”之类的 ;

3)避免创建过多的对象  原则:不用了的东西要及时归还。

哪些操作会造成内存泄露

原文:https://www.cnblogs.com/kaicy/p/14715750.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!