clearTimeout 无法清除定时器

var timer = null
timer = setTimeout(() => {
window.clearTimeout(timer)
console.log(timer)
}, 1000)
为什么打印timer 返回的不是null ,而是数字?
求讲解

阅读 9k
3 个回答

为什么会是 null

你搁哪看着的 clearTimeout(timeoutID) 以后 timeoutID 会变 null 的?


而且你这段代码有什么意义么?setTimeout 本身就是只执行一次,结果你在执行回调里去 clearTimeout,都执行完了你清理不清理有啥用呢?

  1. 找一个杀手,让他5分钟后杀掉自己,然后检查遗书并执行
  2. 杀手杀掉你,打开遗书
  3. 遗书说不要杀你

建议了解相关知识:定时器,事件循环。
设置定时器1000ms后,定时器里的函数会被加入到宏任务队列里,并执行。此时,设置的只执行一次的定时器已经生效过了,清除定时器没有意义。
timer的值为定时器的序号,只有手动赋值为null,才会变为null。
清除定时器要在定时器触发前调用才有意义。

推荐问题