在javascript中释放数组数组的最佳方法

时间:2010-06-08 17:13:19

标签: javascript

在javascript中解除分配数组数组的最佳方法是什么,以确保不会发生内存泄漏?

var foo = new Array();
foo[0] = new Array();
foo[0][0] = 'bar0';
foo[0][1] = 'bar1';
foo[1] = new Array();
...
  1. 删除(富)?
  2. 迭代foo,删除(foo [index])和删除(foo)?
  3. 1和2给我相同的结果?
  4. 无?

3 个答案:

答案 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方法在内部删除了一个引用,所以你可以用这种方式删除元素。最后一行删除对剩下的空数组的引用。

对此不太确定但值得进行一些研究。