clearTimeout 无法清除定时器

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

阅读 8.7k
3 个回答

为什么会是 null

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


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

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题