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

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,两个循环有什么区别吗?


aluckdog
浏览 975回答 2
2回答

呼唤远方

看如此讲解你是否能理解,希望能对你有所帮助:第一个//执行顺序像这样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++) {&nbsp; //和上面差不多,就一点,i为6不满足条件时不执行里面的代码,这样a就仅保留上一次i的值,而不会变为6&nbsp; &nbsp; a = i;}console.log(a); //和第一个一样的

慕工程0101907

第一个 打印完才i++ 退出循环时i=6 然后再执行打印&nbsp;第二个 打印完才i++ 第二个循环打印的是a 最后一次a=5 i++后等于6退出循环 然后再执行settimeout里的log a a=5自然打印5个a啊本质都是一样的 for循环因为是同步执行 所以会先执行完毕
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript