2015-05-22 3 views
0

Я использую таймер для вызова функции через 1 минуту.JS - clearTimeout vs. delete

var timer = setTimeout(function() { 
    console.log("timer trigger"); 
}, 10000); 

clearTimeout (таймер); очищает таймер и таймер удаления; возвращает false.

Почему удалить не работает с таймерами?

+0

Возможно, вы захотите прочитать [это] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete) – Aprian

+0

'delete' удалит объект,' clearTimeout 'вместо этого очистит таймер, связанный с переменной. –

+2

Кроме того **, даже если вы можете ** (попробуйте без var) удалить таймер, который не будет таймер 'clearTimeout'. – Aprian

ответ

4

delete timer; на самом деле ничего не сделает, потому что вы можете только удалить свойства объекта. timer не является свойством объекта, поэтому его нельзя удалить. (Технически это свойство объекта window, но Javascript, если вы не назначили window.timer, то вы не можете удалить верхние уровни). Когда delete возвращает false, это означает, что нечего было удалять.

Тайм-аут, который вы установили, является ссылкой на функцию. Это то, что нужно удалить, а не целое число, возвращаемое setTimeout. Только среда выполнения (браузер) знает, как удалить эту ссылку функции по ее идентификатору, что и было возвращено с setTimeout.

+0

* Технически * это свойство глобального объекта, который является синонимом оконного объекта, но в основном только в браузерах или в браузере. ;-) – RobG

+0

мы не можем удалить ссылки на функции. Но мы можем удалить переменные верхнего уровня. – Valarpirai