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

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

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

holdtom 2019-03-04 22:27:55
在知乎看到的一个题目,不明白为什么结果是123for(var i=1;i<=4;i++){     var time=setTimeout(function(i){         clearTimeout(time);                 console.log(i);     },1000,i);}//输出结果1,2,3
查看完整描述

2 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

打印一句console.log("cleartime:", time),你就明白了为什么最后一次 4 没有打印出来.

for (var i = 1; i <= 4; i++) {
    var time = setTimeout(        function(i) {
            console.log("cleartime:", time);
            clearTimeout(time);
            console.log(i);
        }, 1000, i );}

cleartime: 41cleartime: 42cleartime: 43

也就是说,虽然通过定时器传参避免了i共享, 但是 var time 却共享,每次都是清除的ID 4, 所以最后4没有打印出来.


查看完整回答
反对 回复 2019-03-04
?
慕森王

TA贡献1777条经验 获得超3个赞

这是因为for循环是同步的,而时间模块比如setTimeOut是异步的同步做完了异步可能还在处理中,所以出来的结果会先前于之前的操作,至于为什么不是1234 是因为你每次清楚了下超时调用,不满足条件退出循环最后输出123

查看完整回答
反对 回复 2019-03-04
  • 2 回答
  • 0 关注
  • 1067 浏览
慕课专栏
更多

添加回答

举报

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