在知乎看到的一个题目,不明白为什么结果是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:41cleartime:42cleartime:43也就是说,虽然通过定时器传参避免了i共享,但是vartime却共享,每次都是清除的ID4,所以最后4没有打印出来.
慕神8447489
TA贡献1780条经验 获得超1个赞
这是因为for循环是同步的,而时间模块比如setTimeOut是异步的同步做完了异步可能还在处理中,所以出来的结果会先前于之前的操作,至于为什么不是1234是因为你每次清楚了下超时调用,不满足条件退出循环最后输出123
添加回答
举报
0/150
提交
取消