一道JS题目 财富值62

2016-10-14 14:14发布

for (var i=1;i<=5;i++) {                 setTimeout(function(){                     console.log(i)                 },i*1000)             } for循环语句是如何运行的呢?为什么会输出5个6呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
15条回答

因为 setTimeout 是异步的啊,当你执行完 for 的时候,设定了 5个setTimeout,分别延迟 1至5秒,
执行完 for后,i的值为 6,然后你会看到,每隔一秒输出1个6,一共5个

先看这个例子:

这个题的重点在于, setTimeout是需要等到你的主程序执行流执行完了后才执行.

每执行一次就相当于执行了一次上面的代码,最后循环中的i是5,又执行了一次i++,所以变成了6;

循环里面套函数都会产生这种闭包问题

一周热门 更多>