可能是重复问题:
如何在JavaScript中清空数组
在JavaScript中释放数组的最佳方法
我有一个对象数组:
var arr = [complexObj1, complexObj2];
如果我想清空数组并确保没有内存泄漏,以下代码是否可行?
arr.length = 0;
或者我需要遍历数组并调用类似以下内容的东西吗:
complexObj.release(); or
arr[0] = null; or
delete arr[0];
?
可能是重复问题:
如何在JavaScript中清空数组
在JavaScript中释放数组的最佳方法
我有一个对象数组:
var arr = [complexObj1, complexObj2];
arr.length = 0;
complexObj.release(); or
arr[0] = null; or
delete arr[0];
?
如果数组由简单对象组成,没有引用其他方法或DOM元素,那么上述所有解决方案都足够。
然而,如果数组包含对象,这些对象反过来持有对您已附加到DOM元素的事件处理程序的引用,则在清除数组时对象将不会被销毁。
var Complex = function(nodeId){
this.node=document.getElementById(nodeId);
this.handler=function(e){alert('wohooo'};
this.node.addEventListener('click', this.handler);
}
var myArray = [new Complex('buttonOne'), new Complex('buttonTwo')];
myArray = []
“重置”数组。数组将被清除,但对象仍然保留节点和活动事件处理程序,当单击按钮时会触发该处理程序,这意味着该对象无法从内存中删除。通过从数组中删除,您只是失去了对它的引用。Complex.prototype.release = function() {
this.node.removeEventListener('click',this.handler);
delete this.handler;
delete this.node
}
只需重新初始化数组:
arr = [];
你只需要做
arr = null
类似于
var t = myArray;
delete myArray;
//or
myArray = null;