在javascript中释放数组数组以确保不会发生内存泄漏的最佳方式是什么?在javascript中释放数组数组的最佳方式
var foo = new Array();
foo[0] = new Array();
foo[0][0] = 'bar0';
foo[0][1] = 'bar1';
foo[1] = new Array();
...
- 删除(富)?
- 遍历foo,delete(foo [index])和delete(foo)?
- 1和2给了我相同的结果?
- 无?
在javascript中释放数组数组以确保不会发生内存泄漏的最佳方式是什么?在javascript中释放数组数组的最佳方式
var foo = new Array();
foo[0] = new Array();
foo[0][0] = 'bar0';
foo[0][1] = 'bar1';
foo[1] = new Array();
...
不能删除变量,将其设置为null foo = null;
..或者使用一个命名空间对象
var namespace = {};
namespace.foo = [];
delete namespace.foo;
我想方法Array.splice也可能会为你做的伎俩。它是在每个索引上使用删除的替代方法。
编号: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方法会在内部删除一个引用,这样你就可以很好地以这种方式删除元素。最后一行然后删除对剩下的空数组的引用。
不太确定,但值得一些研究。
foo = null;
应该足以让垃圾收集器摆脱数组,包括它的所有子数组(假设其他没有对它们的引用)。请注意,它只会在需要时才会摆脱它,而不是立即,因此,如果浏览器的内存消耗不会立即下降,那么不要感到惊讶:这不是泄漏。
如果这些数组元素中的任何一个包含对DOM节点的引用,它可能会变得更加复杂。
它只是在IE6中变得更加复杂了 – SLaks 2010-06-08 18:15:50
对于那些在2014年访问的人来说,请注意几乎没有理由将某些东西设置为null或试图“释放”它(这在JS中不存在的概念),或者做任何事情让GC做任何事,它本身就很好,非常感谢。 – 2014-12-25 06:59:49
清除每个数组没有意义,除非它们在别处被引用。 – SLaks 2010-06-08 17:51:49
'foo.length = 0;'可以完全相同。 – CMS 2010-06-08 18:12:15
这样做是O(n^2):( 从数组的前面拼接是O(n),因为每个元素都被重新索引。您建议的解决方案执行n次,给出O(n^2)复杂度 – 2015-09-23 21:16:47