哪些操作會造成內存泄露


1)意外的全局變量引起的內存泄露

function leak(){
leak= "xxx"; //leak成為一個全局變量,不會被回收
}

2)閉包引起的內存泄露

function bindEvent(){
var obj= document.createElement( "XXX");
obj.οnclick= function(){
//Even if it's a empty function
}
}

閉包可以維持函數內局部變量,使其得不到釋放。 上例定義事件回調時,由於是函數內定義函數,並且內部函數--事件回調的引用外暴了,形成了閉包。

解決之道,將事件處理函數定義在外部,解除閉包,或者在定義事件處理函數的外部函數中,刪除對dom的引用。

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、怎樣避免內存泄露

1)減少不必要的全局變量,或者生命周期較長的對象,及時對無用的數據進行垃圾回收;

2)注意程序邏輯,避免“死循環”之類的 ;

3)避免創建過多的對象  原則:不用了的東西要及時歸還。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM