我有以下代码:
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;
})();
超时回调退出后,对象o2
和对象是否有o3
资格进行垃圾回收?
在函数中运行此代码后,局部变量将超出范围,并且在超时触发并断开链接它们的链后,指向的对象将可用于垃圾回收,因此仅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);
那么o1
,o2
和o3
都将是全局对象(属性window
在浏览器中),并且需要单独清除。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句