Clearing objects from Javascript array
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
how to empty an array in JavaScript
Best way to deallocate an array of array in javascript
我有一组对象:
1 | var arr = [complexObj1, complexObj2]; |
如果我要清除阵列并确保没有内存泄漏,下面的操作会执行吗?
1 | arr.length = 0; |
或者我是否需要遍历数组并调用如下内容:
1 2 3 | complexObj.release(); or arr[0] = null; or delete arr[0]; |
?
如果数组由简单的对象组成,而不引用其他方法或DOM元素,那么上述所有解决方案就足够了。
但是,如果数组中包含对象,而这些对象又包含对已附加到DOM元素的事件处理程序的引用,则在清除数组时,不会销毁该对象。
1 2 3 4 5 6 7 8 | 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')]; |
如果现在使用
您的第一个想法是正确的,因为您应该以某种方式"破坏"复杂的对象,并删除它持有的任何引用。
1 2 3 4 5 6 | Complex.prototype.release = function() { this.node.removeEventListener('click',this.handler); delete this.handler; delete this.node } |
现在,您将遍历数组并调用对象的release来从节点中删除事件侦听器。
这是我认为人们通常会怀念的一个简单例子。它也不必是事件处理程序,但可以是复杂对象外部引用的任何对象。
只需重新初始化数组:
1 | arr = []; |
类似的东西
1 2 3 4 | var t = myArray; delete myArray; //or myArray = null; |
你需要做的只是
1 | arr = null |