我有一个问题,想知道如果你setTimeout
从一个对象调用,然后delete
d 对象,会setTimeout
回调还会被调用吗?
显然是的。
var container = {
timer: { // the object to be deleted
start: function() {
console.log('start');
setTimeout(this.end, 2000);
},
end: function() {
console.log('end');
},
},
timerStart: function() {
this.timer.start();
setTimeout(this.timerDelete, 1000);
},
timerDelete: function() {
console.log(delete this.timer);
console.log('deleted timer');
},
};
致电后,container.timerStart();
我收到以下信息:
> container.timerStart();
start
< undefined
true
deleted timer
end
因此表明该对象container.timer
已成功删除,而且在删除container.timer.end
后也调用了该对象container.timer
。我知道delete
只会删除引用,并且一旦删除了对象的所有引用,它就会从内存中删除,但这是否意味着setTimeout
还存储对其回调的引用?
本质上,我的问题是:
- 真的
container.timer
被删了吗? - 为什么
setTimeout
回调container.timer.end
仍然运行? setTimeout
参考这种行为实际上是如何工作的?
非常感谢任何反馈或阅读资源。谢谢!