为了账号安全,请及时绑定邮箱和手机立即绑定

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

为什么

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

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

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

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

正在回答

1 回答

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

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

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

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信