假设我有一个对象,其中包含另一个对象作为其属性,例如
var obj = {
'1': {...},
'42': {...}
};
当obj
超出范围时 - 所有嵌套对象是否隐式销毁,或者我需要显式地迭代它们delete
?
假设我有一个对象,其中包含另一个对象作为其属性,例如
var obj = {
'1': {...},
'42': {...}
};
当obj
超出范围时 - 所有嵌套对象是否隐式销毁,或者我需要显式地迭代它们delete
?
是的,除非另一个参考仍然存在:
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
运算符并返回true
or false
。