做项目的时候发现了一个setTimeout
问题,比如以下代码:
本意我是想让这个for循环每隔1秒延时后打印一次i的值,结果是每隔一秒打印了10
,打印了10个10,对此我表示不求甚解
产生原因
因为setTimeout
是异步执行的,所以整个for
循环其实是设置了10个定时器去打印i的值,而此时i的值早已经变成了10,可能有人会问为什么不是9,那是因为10次循环之后i++了变成了10,所以说控制台打印10个10,那么如何才能让控制台每隔一秒打印i了
解决办法
方法一 把计时器放到一个匿名函数里面,把i当参数传进去,这样计时器里面的i不会受到全局变量i的影响了,代码如下:
方法二 结合使用ES6
,使用let
把i变成一个局部变量,代码如下: