沫荼
2017-06-07 23:24
我点击了多次setTimeout()之后启动了多个计时器,但是每次都赋值给了i变量,按常理来说不应该覆盖变量所指向的计时器吗?
为什么我点击多次clearTimeout()之后计数增加确实变慢了,而且最后停了,这说明确实把每一个计数器都给删除了呀。但是清除的是i变量指向的那个计数器呀。这里不太明白,为什么明明覆盖了i所指向的计数器了执行清除方法之后还能一个个的清除计数器
setTimeout("startCount()",1000);
这个返回的是一个计时器的id,每一个计时器在执行的时候都会有自己的ID,就是没有这个返回值,这个计时器也会运行下去,你覆盖的只是i只是这个变量,你不能做到覆盖计时器,为什么能做到清理计时器,是因为,不断有新的函数生成新的setTimeout, i的值也在变化,当你点击取消函数的时候,setTimeout会等这个取消函数执行过以后一秒才开始执行(即使这个取消函数执行时间可以忽略不计),这时候就会把下一秒将要执行的这个i给取消掉,(但是只会取消一个,因为当时的i值是唯一的)
JavaScript进阶篇
468061 学习 · 21891 问题
相似问题