问答详情
源自:8-6 取消计时器clearTimeout()

关于clearTimeout清除标记的问题

我点击了多次setTimeout()之后启动了多个计时器,但是每次都赋值给了i变量,按常理来说不应该覆盖变量所指向的计时器吗?

为什么我点击多次clearTimeout()之后计数增加确实变慢了,而且最后停了,这说明确实把每一个计数器都给删除了呀。但是清除的是i变量指向的那个计数器呀。这里不太明白,为什么明明覆盖了i所指向的计数器了执行清除方法之后还能一个个的清除计数器

提问者:沫荼 2017-06-07 23:24

个回答

  • 慕勒7123956
    2017-06-08 10:04:32

    setTimeout("startCount()",1000);

    这个返回的是一个计时器的id,每一个计时器在执行的时候都会有自己的ID,就是没有这个返回值,这个计时器也会运行下去,你覆盖的只是i只是这个变量,你不能做到覆盖计时器,为什么能做到清理计时器,是因为,不断有新的函数生成新的setTimeout, i的值也在变化,当你点击取消函数的时候,setTimeout会等这个取消函数执行过以后一秒才开始执行(即使这个取消函数执行时间可以忽略不计),这时候就会把下一秒将要执行的这个i给取消掉,(但是只会取消一个,因为当时的i值是唯一的)