for (var i = 1; i < 5; i++) {
setTimeout(function(i) {
console.log(i);
}, 1000 * i);
}
上面的代码,打印出来为什么是四个undefined
,变量i
的值为什么传不进去
for (var i = 1; i < 5; i++) {
setTimeout(function(i) {
console.log(i);
}, 1000 * i);
}
上面的代码,打印出来为什么是四个undefined
,变量i
的值为什么传不进去
简单的道理,你调用函数没传参数但在函数内用到了参数
for (var i = 1; i < 5; i++) {
setTimeout(function(i) {
console.log(i);
}, 1000 * i, i);
}
for (var i = 0; i < 5; i++) {
setTimeout(function(i) {
return function() {
console.log(i)
}
}(i), 1000 * i)
}
可以这样通过闭包来实现,你的代码没有传参
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
跟闭包无关,改成这样就可以了:
setTimeout(function[, delay, param1, param2, ...])
你没有给function
传param
,所以i
是undefined
MDN