2013-02-12 26 views
2

在Javascript中,我的理解是,当页面上不存在对它们的引用时,项目会被垃圾收集。如果一个对象的引用仍然存在,对象是否可以被垃圾收集?

var obj = { 
    arr: [1,2,3] 
}; 
var arr = obj.arr; 
obj = "hello"; 

在上面的代码中,我已经将我的引用替换为最初的obj对象。我不再有任何对该对象的引用。不过,我确实有一个关于该对象的数组的引用。对象一直保持到arr未被引用为止?或者它可以被垃圾收集?

回答

4

可以收集“obj”值的对象,但它是一个单独的对象,而不是对象(数组),它是“arr”的值。那个不会被收集。

一个对象可以独立于其属性引用的对象进行收集。

(严格地说,这一切都取决于收集器的详细信息,但由于属性值不包含对象的一部分,我会非常惊讶地得知收集器,将做到这一点的。)

+3

@stinkycheeseman请记住,'obj'里面的'arr'实际上并不包含在'obj'内,它只是被'obj'引用。 – ajp15243 2013-02-12 20:23:36

相关问题