您的位置:首页 > Web前端 > JavaScript

javascript内存泄漏总结

2015-09-28 12:14 441 查看
作为一个前端,其实很少会注意到有内存泄漏的情况,大多数前端er都会认为JS是不会存在内存泄漏的,然后事物都没有绝对的,按照JS的设计初衷javascript这门语言是不应该有内存泄漏这个问题的,但是JS并不是独立的,JS本身就是用来与DOM交互的,这两者之间摩擦摩擦,就会产生一些问题,下面来说说这些问题怎么产生的以及解决办法:

1、给DOM对象添加的属性是一个对象的引用。范例:

var MyObject = {};

document.getElementById('myDiv').myProp = MyObject;

解决方法:

在window.onunload事件中写上: document.getElementById('myDiv').myProp = null;

2、DOM对象与JS对象相互引用。范例:

function Encapsulator(element) {

this.elementReference = element;

element.myProp = this;

}

new Encapsulator(document.getElementById('myDiv'));

解决方法:

在onunload事件中写上: document.getElementById('myDiv').myProp = null;

3、给DOM对象用attachEvent绑定事件。范例:

function doClick() {}

element.attachEvent("onclick", doClick);

解决方法:

在onunload事件中写上: element.detachEvent('onclick', doClick);

4、从外到内执行appendChild。这时即使调用removeChild也无法释放。范例:

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

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

document.body.appendChild(parentDiv);

parentDiv.appendChild(childDiv);

解决方法:

从内到外执行appendChild:

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

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

parentDiv.appendChild(childDiv);

document.body.appendChild(parentDiv);

5、反复重写同一个属性会造成内存大量占用(但关闭IE后内存会被释放)。范例:

for(i = 0; i < 5000; i++) {

hostElement.text = "asdfasdfasdf";

}

这种方式相当于定义了5000个属性!

解决方法:

其实没什么解决方法:就是编程的时候尽量避免出现这种情况咯~~

上面是个人总结的几条,可能还有别的未发现的情况,欢迎补充!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: