课程
/前端开发
/JavaScript
/JavaScript进阶篇
我点击了多次setTimeout()之后启动了多个计时器,但是每次都赋值给了i变量,按常理来说不应该覆盖变量所指向的计时器吗?
为什么我点击多次clearTimeout()之后计数增加确实变慢了,而且最后停了,这说明确实把每一个计数器都给删除了呀。但是清除的是i变量指向的那个计数器呀。这里不太明白,为什么明明覆盖了i所指向的计数器了执行清除方法之后还能一个个的清除计数器
2017-06-07
源自:JavaScript进阶篇 8-6
正在回答
setTimeout("startCount()",1000);
这个返回的是一个计时器的id,每一个计时器在执行的时候都会有自己的ID,就是没有这个返回值,这个计时器也会运行下去,你覆盖的只是i只是这个变量,你不能做到覆盖计时器,为什么能做到清理计时器,是因为,不断有新的函数生成新的setTimeout, i的值也在变化,当你点击取消函数的时候,setTimeout会等这个取消函数执行过以后一秒才开始执行(即使这个取消函数执行时间可以忽略不计),这时候就会把下一秒将要执行的这个i给取消掉,(但是只会取消一个,因为当时的i值是唯一的)
勾子
慕勒7123956 回复 勾子
勾子 回复 慕勒7123956
沫荼 提问者
慕勒7123956 回复 沫荼 提问者
举报
本课程从如何插入JS代码开始,带您进入网页动态交互世界
4 回答关于removechild清除的次数问题
2 回答关于clearTimeout(i-1);
3 回答关于笔记的问题
2 回答关于笔记的问题
1 回答关于删除节点的问题