我有以下代码:
for(var i = 0; i <=3; i++){
setTimeout(function(){
var j = i;
function(){
console.log(j);
}
}, 1000);
}
我收到错误&#39;预计功能名称&#39;关于第二个功能。我不明白为什么我不能在这里使用匿名功能。
答案 0 :(得分:4)
要创建一个闭包并立即调用它,请执行以下操作:
(function(){
console.log(j);
}());
但是,要真正为内部函数捕获i
,可以将函数向上移动一点并将其传递给i
:
for (var i = 0; i <= 3; i++) {
(function(i){
setTimeout(function(){
console.log(i);
}, 1000);}(i));
}
并且,为了实际打印数字1秒后,你可以这样做:
for (var i = 0; i <= 3; i++) {
(function(i){
setTimeout(function(){
console.log(i);
}, 1000*(i+1));}(i));
}
答案 1 :(得分:0)
根据Jordão的回答,我最终使用了以下代码:
for(var i = 0; i <=3; i++){
(function(){
var j = i;
setTimeout(function(){
console.log(j);
}, 1000);
}());
}
答案 2 :(得分:0)
所以你知道将来如果使用递归,你可以使用更小(更干净?)的代码行来获得输出:
function loop(i) {
console.log(i = i || 0);
if (i <= 3) setTimeout(loop, 1000, ++i);
}
loop();