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

for循环中定时器打印值的问题?

for循环中定时器打印值的问题?

aluckdog 2019-03-08 18:19:32
for(var i = 1; i <= 5; i++){setTimeout(function () {    console.log(i);}, 1000);}这个循环中为什么打印的是5个6?而不是5个5?for(var i=1; i<=5; i++) {var a = i;setTimeout(function () {    console.log(a);}, 1000);}这个循环中打印5个5,两个循环有什么区别吗?
查看完整描述

2 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

看如此讲解你是否能理解,希望能对你有所帮助:

第一个


//执行顺序像这样

var i;

for (i = 0; i <= 5; i++) { //每次运行i都在递增,当运行到6时,不满足条件跳出


}

console.log(i); //此时打印i为6,只是使用了setTimeout会打印多次而已

第二个


//执行顺序像这样

var a;

for (var i = 0; i <= 5; i++) {  //和上面差不多,就一点,i为6不满足条件时不执行里面的代码,这样a就仅保留上一次i的值,而不会变为6

    a = i;

}

console.log(a); //和第一个一样的


查看完整回答
反对 回复 2019-03-09
?
慕工程0101907

TA贡献1887条经验 获得超5个赞

第一个 打印完才i++ 退出循环时i=6 然后再执行打印 
第二个 打印完才i++ 第二个循环打印的是a 最后一次a=5 i++后等于6退出循环 然后再执行settimeout里的log a a=5自然打印5个a啊

本质都是一样的 for循环因为是同步执行 所以会先执行完毕


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

添加回答

举报

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