代码如下,已知结果是立即输出0,1,2,3,4,看解释说是输入的i是undefined;但是在for循环内部不是应该可以取到i的值吗?我想知道为什么会是立即输出0,1,2,3,4,而不是每隔1秒输出一个数字。恳请大腿解释一下。。。for (var i = 0; i < 5; i++) { setTimeout((function(i) { console.log(i); })(i), i * 1000);}
2 回答
喵喔喔
TA贡献1735条经验 获得超5个赞
(function(i) {
console.log(i);
})(i)
这个函数执行完会返回一个undefined(因为没有return的值),所以你的代码相当于
for (var i = 0; i < 5; i++) {
console.log(i);
setTimeout(undefined, i * 1000);
}
如果想按顺序每隔1秒输出一个数字,应该写成下面那样
for (var i = 0; i < 5; i++) {
setTimeout((function(i) {
// 立即执行函数返回一个函数给定时器
return function() {
console.log(i);
}
})(i), i * 1000);
}
添加回答
举报
0/150
提交
取消
