5

假设我有一个对象,其中包含另一个对象作为其属性,例如

var obj = {
    '1': {...},
    '42': {...}
};

obj超出范围时 - 所有嵌套对象是否隐式销毁,或者我需要显式地迭代它们delete

4

1 回答 1

3

是的,除非另一个参考仍然存在:

var obj = {
    '1': {...},
    '42': {...}
};


var save = obj['1'];

obj = null; 

垃圾回收后,假设没有创建其他引用,那么 obj 和 obj['42'] 的空间将被回收,saved 的值当然会被保留。

Mea culpa :正如我原来的评论中提到的delete obj那样无效,因为obj被声明为var. 曾经obj是全局对象,因此是全局对象的属性,delete本来可以正常工作的。要有效地删除 var,请使用obj = null. 我在测试中学到的一件事是delete运算符并返回trueor false

于 2012-05-16T01:51:04.797 回答