程中,以下的編程方式都會造成即使關閉ie也無法釋放記憶體的問題,下面分類給出:
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個屬性!
解決方案:
其實沒什麼解決方案:p~~~就是編程的時候盡量避免出現這種情況咯~~