var btn = document.getElementById("myBtn ");
btn.onclick = function(){
document.getElementById("myDiv").innerHTML = "Processing...";
document.getElementById("myDiv").innerHTML = "Processing.. .";
程式碼如下:
div>
}
}
複製程式碼
程式碼如下: var a=document.getElementById(" xx");
var b=document.getElementById("#xxx");
a.r=b;
複製程式碼
程式碼如下:
var a=document.getElementById("#xx");
a.r=document.getElementById("#xx");
a.r=a; >
對於純粹的ECMAScript 物件而言,只要沒有其他物件引用物件a、b,也就是說它們只是相互之間的引用,那麼仍然會被垃圾收集系統識別並處理。但是,在 Internet Explorer 中,如果循環參考中的任何物件是 DOM 節點或 ActiveX 對象,垃圾收集系統則不會發現它們之間的循環關係與系統中的其他物件是隔離的並釋放它們。最終它們將保留在記憶體中,直到瀏覽器關閉。 3、
複製程式碼
程式碼如下: var elemget document. 'test');
elem.addEventListener('click', function() {
alert('You clicked ' elem.tagName);
});
複製程式碼 程式碼如下:
var elem = document.getElementById('test'); elem.addEventListener('click', function() { alert('You clicked ' this.tagName); // 不再直接引用elem變數 });
4、
複製程式碼
複製程式碼 複製程式碼
複製程式碼
複製程式碼
複製程式碼
複製碼: function bindEvent() { var obj=document.createElement("XXX"); obj.onclick=function(){
//Even>//Even>//Even>//Even>//Even>/ if it's a empty function
}
}
複製程式碼 程式碼如下: function bindEvent()
{
var obj=document.createElement("XXX");
obj.onclick=onclickHandler;
或是在定義事件處理函數的外部函數中,刪除對dom的引用(題外,《JavaScript權威指南》中介紹過,閉套件中,作用域中沒用的屬性可以刪除,以減少記憶體消耗。)
複製程式碼
程式碼如下:
obj=null;
} 5、
複製程式碼
複製碼>
程式碼如下: a = {p: {x: 1}}; b = a.p; delete a.p; 執行這段程式碼之後b.x的值依然是1.由於已經刪除的屬性引用依然存在,因此在JavaScript的某些實作中,可能因為這種不嚴謹的程式碼而造成記憶體外洩。所以在銷毀物件的時候,要遍歷屬性中屬性,依序刪除。 6. 自動型式裝箱轉換別不相信,下面的程式碼在ie系列中會導致記憶體外洩複製程式碼 程式碼如下: var s=”lalala”; alert(s.length); s本身是一個string而非object ,它沒有length屬性,所以當訪問length時,JS引擎會自動建立一個臨時String物件封裝s,而這個物件一定會洩漏。這個bug匪夷所思,所幸解決起來相當容易,記得所有值類型做.運算之前先顯式轉換一下: 複製程式碼複製程式碼程式碼如下: var s="lalala"; alert(new String(s).length); 7、某些DOM操作IE系列的特有問題簡單的來說就是在向不在DOM樹上的DOM元素appendChild;IE7中,貌似為了改善內存洩露,IE7採用了極端的解決方案:離開頁面時回收所有DOM樹上的元素,其它一概不管。