A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1)意外的全局变量引起的内存泄露
function leak(){
  leak="xxx";//leak成为一个全局变量,不会被回收
}
2)闭包引起的内存泄露
function bindEvent(){
  var obj=document.createElement("XXX");
  obj.οnclick=function(){
    //Even if it's a empty function
  }
}
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)IE7/8引用计数使用循环引用产生的问题

function fn(){
  var a={};
  var b={};
  a.pro=b;
  b.pro=a;
}
fn();


怎样避免内存泄露

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

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

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

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马