链接对象的垃圾收集

时间:2016-04-14 14:43:31

标签: javascript

我有以下代码:

var o = (function() {
    var o1 = {name: "o1"};
    var o2 = {name: "o2"};
    var o3 = {name: "o3"};

    o1.child = o2;
    o2.child = o3;
    o3.parent = o2;

    setTimeout(function() {
        o1.child = null;
    }, 1000);

    return o1;
})();

对象o2o3是否有资格在超时回调退出后进行垃圾回收?

1 个答案:

答案 0 :(得分:4)

在代码中运行此代码时,局部变量将超出范围,并且在超时触发后,指向的对象将可用于垃圾回收并中断链接它们的链,因此仅保留o1 ,分配给o

但是,如果您只是在全局范围内运行该函数的内容,例如:

var o1 = {name: "o1"};
var o2 = {name: "o2"};
var o3 = {name: "o3"};

o1.child = o2;
o2.child = o3;

setTimeout(function() {
    o1.child = null;
}, 1000);

然后o1o2o3都将成为全局对象的属性(浏览器中为window),需要单独清除。