在循环内使用定时器时,为什么结果都是同样的值?

收藏
Javascript基础语法
3
Mar 16, 2018

代码如下:

for (var i = 0; i < 5; i++) { 
   setTimeout(function() { console.log(i); }, 1000); 
} 
console.log(i); 

输出结果是5,5,5,5,5,5

回答

云松回答

问题分析:

1、你用的是for循环。里面有个i++,每次循环一次i就加一次。当循环到第五次的时候也就是显示4的时候后,仍然会加一次i。所以循环结束最后i=5。

2、setTimeout的机制是异步执行。所以for循环的时候根本不会等setTimeout执行完了,再循环,而是一口气把i的数字加到5。然而循环中的setTimeout语句会被排入内存中排序,等到时间到了,再执行setTimeout。当setTimeout执行时,i的值就是5了。

 

问题解答:

所以定时器输出的都是for循环结束后的值,都是5。

(0)

提交成功