如何在javascript中释放闭包的内存?

Cod*_*Lim 1 javascript memory

关闭:

function test() {
  var count = 0;

  return function() {
    count++;
  };
}
Run Code Online (Sandbox Code Playgroud)

众所周知,调用count后不会释放test(),现在如果闭包对我没用,我怎么能释放它的内存呢?

sle*_*man 5

javascript 中的所有对象都被垃圾收集,无论它们是否参与关闭的天气。在你上面的代码中,如果你这样做:

var x = test();
Run Code Online (Sandbox Code Playgroud)

那么当然count不能释放for 的内存,因为它以后可能会被x. 但是,如果您这样做:

var x = test();
x = "";
Run Code Online (Sandbox Code Playgroud)

的内存count迟早会被垃圾回收。

另外,如果你这样做:

function foo () {
    var x = test();
    x();
}

foo();
Run Code Online (Sandbox Code Playgroud)

内存count也将被垃圾收集,因为xfoo()结束时超出范围。

确保在 javascript 中没有内存泄漏的最佳方法是避免使用全局变量。

注意:旧版 IE 中的垃圾收集器使用简单的引用计数,这意味着循环数据结构不会被垃圾收集。这在 IE6 或 IE7 中已得到修复,并且在其他通常使用标记和清除垃圾收集器的 javascript 引擎中从未出现过问题