我正在看一些JS ViewModel代码,它们使用这个模式来引用外部闭包,以防任何库在调用函数作为回调时更改" this“指针(一定要喜欢JavaScript):
function FruitViewModel {
var that = this; // <-- HERE
this.someCallBack = function () {
that.utilityFunction();
};
this.utilityFunction = function () { }
}我的问题是:这会导致内存泄漏吗?还是会因实现而异?(例如,如果垃圾是从里到外收集的,而不是从外到里)
编辑:请假设在GC考虑将此对象用于集合时,没有任何对象包含对someCallBack的引用。
发布于 2011-10-12 20:11:17
垃圾收集器足够聪明,可以检测到这样的循环引用。这样它就不会泄露了。
发布于 2011-10-12 20:08:47
在所有JS引擎中,只有在父函数中声明的所有函数都不再被引用时,才会收集对象。
我不知道这里有任何相关的GC错误。
https://stackoverflow.com/questions/7739788
复制相似问题