我的无参照javascript对象在哪里以及存在多长时间?

时间:2016-04-06 10:08:44

标签: javascript garbage-collection

var SomeObj = function() {
    this.i = 0;
};

setTimeout(function() {
    new SomeObj; // I mean this object
}, 0);

在什么时候收集了SomeObj对象垃圾?

2 个答案:

答案 0 :(得分:1)

一旦不再使用垃圾收集,就有资格进行垃圾收集。 这意味着在构造函数调用后立即执行。

这实际发生的时间是一个实现细节。如果您遇到GC问题,则需要深入了解您的特定Javascript引擎。

答案 1 :(得分:1)

未从任何地方引用的对象在程序视图中根本不“存在”。它仍驻留在内存中的某个位置取决于解释器的垃圾收集特性,以及何时/是否感觉需要收集它。

在您的特定情况下,该对象在创建后立即有资格进行垃圾收集,并且未使用表达式产生的引用(例如在赋值中)。事实上,首先可能根本不会创建对象,优化编译器可以轻松地remove the whole function - 它没有副作用,也没有返回值。