在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ for循環(huán)中定時器打印值的問題?

for循環(huán)中定時器打印值的問題?

for(var i = 1; i <= 5; i++){

setTimeout(function () {
    console.log(i);
}, 1000);

}
這個循環(huán)中為什么打印的是5個6?而不是5個5?
for(var i=1; i<=5; i++) {

var a = i;
setTimeout(function () {
    console.log(a);
}, 1000);

}
這個循環(huán)中打印5個5,兩個循環(huán)有什么區(qū)別嗎?

回答
編輯回答
九年囚

for循環(huán)是在什么時候跳出的?i = 6 時。
i = 5 時 a = 5;
i = 6 時循環(huán)跳出, for循環(huán)內部沒有再次執(zhí)行,a = 5;
所以setTimeout執(zhí)行時 i = 6, a = 5。

2017年1月23日 16:09
編輯回答
維他命

完整解釋一下

問題關鍵  var  for循環(huán)   setTimeout 
首先 var作用域是這個函數   for循環(huán)是一瞬間完成的  而setTimeout是存在隊列中的 當他執(zhí)行的時候已經i為6了
i為6不滿足條件  但是他現在執(zhí)行了 console.log(i) 結果就是5次6

第二個  同樣道理只不過他賦值與a為5  到6沒有進入循環(huán)從而賦值 所以5次5

隊列是等主線程所以程序執(zhí)行完畢之后在執(zhí)行

https://www.cnblogs.com/wangw...

2018年4月17日 17:30
編輯回答
病癮

看如此講解你是否能理解,希望能對你有所幫助:
第一個

//執(zhí)行順序像這樣
var i;
for (i = 0; i <= 5; i++) { //每次運行i都在遞增,當運行到6時,不滿足條件跳出

}
console.log(i); //此時打印i為6,只是使用了setTimeout會打印多次而已

第二個

//執(zhí)行順序像這樣
var a;
for (var i = 0; i <= 5; i++) {  //和上面差不多,就一點,i為6不滿足條件時不執(zhí)行里面的代碼,這樣a就僅保留上一次i的值,而不會變?yōu)?
    a = i;
}
console.log(a); //和第一個一樣的
2017年10月20日 18:46
編輯回答
久礙你

第一個 打印完才i++ 退出循環(huán)時i=6 然后再執(zhí)行打印
第二個 打印完才i++ 第二個循環(huán)打印的是a 最后一次a=5 i++后等于6退出循環(huán) 然后再執(zhí)行settimeout里的log a a=5自然打印5個a啊

本質都是一樣的 for循環(huán)因為是同步執(zhí)行 所以會先執(zhí)行完畢

2018年8月31日 05:58
編輯回答
硬扛

第一個。 當執(zhí)行console.log(i) 的時候: i = 6, a is undefined
第二個。 當執(zhí)行console.log(a) 的時候: i = 6, a = 5.

先弄懂for 循環(huán)。

2017年1月22日 01:57
編輯回答
胭脂淚

第一個循環(huán)的條件是i<=5,也就是說i==5的時候最后一次進入循環(huán),之后進入i++,i變成6,再次判斷不進入循環(huán),因此i==6,打印的是5個6。
第二個循環(huán)大概是寫錯了吧,你是想寫console.log(a)吧,不然和第一個循環(huán)沒有區(qū)別,如果是a的話那么就是在最后一次循環(huán)中i==5,為a賦值,a==5,之后打印5個5.

2017年8月29日 18:45
編輯回答
練命

這是因為setTimeout用了循環(huán)中的同一個變量i,可以參考這篇文章理解https://www.cnblogs.com/zamho...

2018年8月17日 13:53