垃圾回收:对象属性

Garbage collection: object properties

本文关键字:对象 属性      更新时间:2023-09-26

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

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

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

是的,除非另一个引用仍然存在:

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

var save = obj['1'];
obj = null; 

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

Mea culpa :正如评论中提到的,delete obj在我的原文中是无效的,因为obj被宣布为var。如果obj全局对象,因此是全局对象的属性,delete就可以正常工作。要有效地删除变量,请使用 obj = null 。我学到的一件事是,delete运算符并返回truefalse