У меня был вопрос, и я подумал, что если вы вызвали 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
на самом деле работать со ссылкой на это поведение?
Любые отзывы или ресурсы для чтения с благодарностью. Спасибо!