为闭包内部的变量赋值给闭包 - 它是否泄漏?

时间:2011-10-12 12:04:16

标签: javascript

我正在查看一些使用此模式的JS ViewModel代码,以便能够引用外部闭包,以防任何库在调用函数作为回调时更改“this”指针(得到爱的JavaScript):

function FruitViewModel {
   var that = this; // <-- HERE

   this.someCallBack = function () {
      that.utilityFunction();
   };

   this.utilityFunction = function () { }
}

我的问题是:这会导致内存泄漏还是特定于实现? (例如,如果垃圾是从里外收集而不是从外面收集的)

编辑:请假设在GC认为此对象收集时,没有任何内容可以引用someCallBack

2 个答案:

答案 0 :(得分:1)

在所有JS引擎中,在父函数中声明的所有函数不再被引用之前,不会收集该对象。

我不知道这里有任何GC错误。

答案 1 :(得分:1)

垃圾收集器足够聪明,可以检测到这样的循环引用。所以它不会泄漏。