清除Javascript数组中的对象
可能重复:
如何在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
链接地址: http://www.djcxy.com/p/23945.html