关于定时器多次启动/关闭问题

来源:8-6 取消计时器clearTimeout()

慕娘6191445

2023-11-25 14:55

为什么

setTimeout连续多次触发之后,多次clearTimeout可以停止

setInterval连续多次之后,多次clearInterval停止不了

<input type = "button" value = "Start" onclick="startCount">

<input type = "button" value = "Stop" onclick="stopCount">

写回答 关注

1回答

  • 一捧火山灰
    2天前

    如果代码你没有进行更改的话,原代码里i存储的timeout的id只有最后一个触发start函数的计时器,而其他任务都以异步调用的形式等待执行,当他们再一次触发回调函数的时候,i值就又存储上计时器id了,所以会有多次点击stop可以逐个取消掉的效果;

    而setInterval的id只有调用该函数的时候才会唤起一次,而不是递归地调用setTimeout一样“实时更新”变量i中存储的id值。因此多次触发setInterval函数后,变量i仅能存储最后一次调用的setInterval函数的计时器id,无法再得知此前启动的计时器id了,也就自然没法通过clearInterval来取消掉。

    如果想要保证每次启动计时器的id都能被有效地存储下来,可以考虑使用数组来存储。

JavaScript进阶篇

本课程从如何插入JS代码开始,带您进入网页动态交互世界

468276 学习 · 21892 问题

查看课程

相似问题