一道关于js定时器的《面试题》

https://img3.mukewang.com/5c667ac20001ae8a06300580.jpg

希望能够详细的讲解下

clearTimeout(tc) 为什么就能把最后一个setTimeout给清除?


慕雪6442864
浏览 574回答 1
1回答

海绵宝宝撒

因为js没有块级作用域,只有全局作用域和函数作用域。所以,代码实际上是这样:function&nbsp;fn1()&nbsp;{&nbsp;&nbsp;var&nbsp;ts,&nbsp;i;&nbsp;&nbsp;for(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;4;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;tc&nbsp;=&nbsp;setTimeout(function(i)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(i); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clearTimeout(ts); &nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;10,&nbsp;i); &nbsp;&nbsp;} }而且,for循环先被执行完,才开始执行定时器。所以,不存在各个定时器使用对应的ts临时值的情况,它们使用的都是ts最终的值。也就是:每个定时器中ts都指向了原fn1函数的ts,而此时ts的值是最后一个定时器,也就是第四个定时器。因此,在第一个定时器执行后,第四个定时器就被清除了。
打开App,查看更多内容
随时随地看视频慕课网APP