2016-10-14 14:14发布
for (var i=1;i<=5;i++) { setTimeout(function(){ console.log(i) },i*1000) } for循环语句是如何运行的呢?为什么会输出5个6呢?
因为 setTimeout 是异步的啊,当你执行完 for 的时候,设定了 5个setTimeout,分别延迟 1至5秒,执行完 for后,i的值为 6,然后你会看到,每隔一秒输出1个6,一共5个
setTimeout
for
1至5
i
6
先看这个例子:
这个题的重点在于, setTimeout是需要等到你的主程序执行流执行完了后才执行.
每执行一次就相当于执行了一次上面的代码,最后循环中的i是5,又执行了一次i++,所以变成了6;
循环里面套函数都会产生这种闭包问题
最多设置5个标签!
付费偷看金额在0.1-10元之间
因为
setTimeout
是异步的啊,当你执行完for
的时候,设定了 5个setTimeout
,分别延迟1至5
秒,执行完
for
后,i
的值为 6,然后你会看到,每隔一秒输出1个6
,一共5个先看这个例子:
这个题的重点在于, setTimeout是需要等到你的主程序执行流执行完了后才执行.
每执行一次就相当于执行了一次上面的代码,最后循环中的i是5,又执行了一次i++,所以变成了6;
循环里面套函数都会产生这种闭包问题
一周热门 更多>