IE中的内存泄露

JavaScript在IE中的内存泄露一共有四种情况:

首先要清楚JavaScript中的垃圾回收机制  当一个对象没有被变量所引用时就会自动回收。

1.  循环引用  当两个对象发生循环引用 并且其中一个是DOM对象是就会发生内存泄露。

实例代码:

一个构造函数需要传入一个DOM节点

function leak(dom){

this.domLink = dom;

dom.property = this;

}

这样每次创建一个对象是都会都会发生内存泄露。

                 解决方法:

显示获得DOM节点释放对JavaScript对象的引用。

 

2.  闭包的使用 

function leak(){

var node = document.getElementById("test");

function inner(){

//在这里使用了node节点 

}

node.onclick = inner;

}

 

解决方法:

这里如果要释放掉泄露的内存就必须注销绑定的函数,因为inner又是内部元素所以没有办法得到。要想 注销掉就必须得有一个引用。可以这样

node.property = inner;

这样我们就可以remove这个事件监听器了。

 

3.  交叉页面内存泄露  

     一般发生在动态创建页面元素并将其插入DOM树种发生。这种内存泄露主要是因为DOM元素插入的顺序不对引起     的。 并且即使页面导向其他页面或者关闭内存也不会被释放。引起这种泄露的原因是 在DOM节点之间会有一个节    点关系管理的对象 如果一次创建好插入进去就会有关系管理对象 而在插入DOM树种会继承DOM树中的这个对象              以前的就会被释放掉 就会造成内存泄露。  这是IE6一个很严重的BUG。

实例代码:

var parentNode = document.createElment("div");

var node = document.createElement("div");

 

//这样就会引起内存泄露  

parentNode.appendChild(node);

document.documentElement.appendChild(parentNode);

document.documentElement.removeNode(parentNode);

parentNode.removeNode(node);

 

//这样就不会引起内存泄露

document.documentElement.appendChild(parentNode);

parentNode.appendChild(node);

4.  貌似泄露

这个是动态修改脚本文件里面的文本内容是会发生内存泄露,不过这种泄露会在页面清空或者转向时释放掉内                   存。

 

         可以参考下面链接:  http://www.cnblogs.com/birdshome/archive/2006/05/28/ie_memoryleak.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值