为什么
setTimeout连续多次触发之后,多次clearTimeout可以停止
setInterval连续多次之后,多次clearInterval停止不了
?
<input type = "button" value = "Start" onclick="startCount">
<input type = "button" value = "Stop" onclick="stopCount">
如果代码你没有进行更改的话,原代码里i存储的timeout的id只有最后一个触发start函数的计时器,而其他任务都以异步调用的形式等待执行,当他们再一次触发回调函数的时候,i值就又存储上计时器id了,所以会有多次点击stop可以逐个取消掉的效果;
而setInterval的id只有调用该函数的时候才会唤起一次,而不是递归地调用setTimeout一样“实时更新”变量i中存储的id值。因此多次触发setInterval函数后,变量i仅能存储最后一次调用的setInterval函数的计时器id,无法再得知此前启动的计时器id了,也就自然没法通过clearInterval来取消掉。
如果想要保证每次启动计时器的id都能被有效地存储下来,可以考虑使用数组来存储。