for (var i=1;i<=5;i++) {
setTimeout(function(){ console.log(i)
},i*1000)
}for循环语句是如何运行的呢?为什么会输出5个6呢?
1 回答
慕慕森
TA贡献1856条经验 获得超17个赞
闭包,闭包,闭包的问题!
通过上面的代码,可以看出只定义了一个变量 i ,只有在循环里面赋值为1~5,循环结束后是 6。
而setTimeout中的代码是在循环之后执行的,所以输出的i是 6。而不是你所想的。
因为 i 只有一个,不可能同时等于 1,2,3,4,5.
可以改成(建议先理解上面一段代码,先不要纠结ES6的):
for (var i=1;i<=5;i++) {
(function(){ var j = i;
setTimeout(function(){console.log(j)},
j*1000);
})();
}
\\ 或 ES6for (let i=1;i<=5;i++) {
setTimeout(()=>console.log(i),i*1000);
}添加回答
举报
0/150
提交
取消
