在javascript中解除分配数组数组的最佳方法是什么,以确保不会发生内存泄漏?
var foo = new Array();
foo[0] = new Array();
foo[0][0] = 'bar0';
foo[0][1] = 'bar1';
foo[1] = new Array();
...
答案 0 :(得分:7)
foo = null;
应该足以让垃圾收集器摆脱数组,包括它的所有子数组(假设没有其他任何引用它们)。请注意,它只会在需要时,而不是立即消除它,所以如果浏览器的内存消耗不会立即消失,请不要感到惊讶:这不是泄漏。
如果这些数组元素中的任何一个包含对DOM节点的引用,则可能会变得更复杂。
答案 1 :(得分:1)
您无法删除变量,请将其设为null foo = null;
..或使用命名空间对象
var namespace = {};
namespace.foo = [];
delete namespace.foo;
答案 2 :(得分:0)
我认为Array.splice也可以帮你解决问题。它是在每个索引上使用delete的替代方法。
参考:https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Objects/Array/Splice
您也可以将它与Array.forEach结合使用,如下所示:
foo.forEach(function(element,ind,arr){
arr.splice(ind,1); //emptying the array
});
foo = null; //remove ref to empty array
如果您只使用forEach部分,则将清空foo数组。我认为splice方法在内部删除了一个引用,所以你可以用这种方式删除元素。最后一行删除对剩下的空数组的引用。
对此不太确定但值得进行一些研究。