为了账号安全,请及时绑定邮箱和手机立即绑定

for循环中使用setTimeout的问题,进阶版

for循环中使用setTimeout的问题,进阶版

守着星空守着你 2019-08-21 13:18:04
在知乎看到的一个题目,不明白为什么结果是123for(vari=1;i
查看完整描述

2 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

打印一句console.log("cleartime:",time),你就明白了为什么最后一次4没有打印出来.
for(vari=1;i<=4;i++){
vartime=setTimeout(
function(i){
console.log("cleartime:",time);
clearTimeout(time);
console.log(i);
},1000,i);
}
cleartime:4
1
cleartime:4
2
cleartime:4
3
也就是说,虽然通过定时器传参避免了i共享,但是vartime却共享,每次都是清除的ID4,所以最后4没有打印出来.
                            
查看完整回答
反对 回复 2019-08-21
?
慕神8447489

TA贡献1780条经验 获得超1个赞

这是因为for循环是同步的,而时间模块比如setTimeOut是异步的同步做完了异步可能还在处理中,所以出来的结果会先前于之前的操作,至于为什么不是1234是因为你每次清楚了下超时调用,不满足条件退出循环最后输出123
                            
查看完整回答
反对 回复 2019-08-21
  • 2 回答
  • 0 关注
  • 344 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信