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); //和第一个一样的
慕工程0101907
TA贡献1887条经验 获得超5个赞
第一个 打印完才i++ 退出循环时i=6 然后再执行打印
第二个 打印完才i++ 第二个循环打印的是a 最后一次a=5 i++后等于6退出循环 然后再执行settimeout里的log a a=5自然打印5个a啊
本质都是一样的 for循环因为是同步执行 所以会先执行完毕
添加回答
举报
0/150
提交
取消