Javascript 闭包时需要函数名

Javascript 闭包时需要函数名,javascript,Javascript,我有以下代码: for(var i = 0; i <=3; i++){ setTimeout(function(){ var j = i; function(){ console.log(j); } }, 1000); } for(var i = 0; i <=3; i++){ (function(){ var j = i; setTimeout(fun

我有以下代码:

for(var i = 0; i <=3; i++){
    setTimeout(function(){
        var j = i;
        function(){
            console.log(j);
        }
    }, 1000);
}
for(var i = 0; i <=3; i++){ 
    (function(){
        var j = i;
        setTimeout(function(){
        console.log(j);
        }, 1000);
    }());
}

for(var i=0;i要创建一个闭包并立即调用它,请执行以下操作:

(function(){
  console.log(j);
}());
但是,要真正为内部函数正确捕获
i
,可以将函数向上移动一点并传递它
i

for (var i = 0; i <= 3; i++) {
  (function(i){
    setTimeout(function(){
      console.log(i);
    }, 1000);}(i));
}

for(var i=0;i要创建一个闭包并立即调用它,请执行以下操作:

(function(){
  console.log(j);
}());
但是,要真正为内部函数正确捕获
i
,可以将函数向上移动一点并传递它
i

for (var i = 0; i <= 3; i++) {
  (function(i){
    setTimeout(function(){
      console.log(i);
    }, 1000);}(i));
}

for(var i=0;i根据Jordão的回答,我最终使用了以下代码:

for(var i = 0; i <=3; i++){
    setTimeout(function(){
        var j = i;
        function(){
            console.log(j);
        }
    }, 1000);
}
for(var i = 0; i <=3; i++){ 
    (function(){
        var j = i;
        setTimeout(function(){
        console.log(j);
        }, 1000);
    }());
}

for(var i=0;i根据Jordão的回答,我最终使用了以下代码:

for(var i = 0; i <=3; i++){
    setTimeout(function(){
        var j = i;
        function(){
            console.log(j);
        }
    }, 1000);
}
for(var i = 0; i <=3; i++){ 
    (function(){
        var j = i;
        setTimeout(function(){
        console.log(j);
        }, 1000);
    }());
}

for(var i=0;i,因此您知道,如果使用递归,将来可以使用更少(更干净?)的代码行获得输出:

function loop(i) {
  console.log(i = i || 0);
  if (i <= 3) setTimeout(loop, 1000, ++i);
}

loop();
函数循环(i){
console.log(i=i | | 0);

如果(i因此您知道,在将来,如果使用递归,您可以使用更少(更干净?)的代码行获得输出:

function loop(i) {
  console.log(i = i || 0);
  if (i <= 3) setTimeout(loop, 1000, ++i);
}

loop();
函数循环(i){
console.log(i=i | | 0);

如果(当这解决了眼前的问题时,OP将获得
4
作为每个超时的输出。我知道这不是问题所在,但你也可以尝试本垒打:)这帮了大忙。谢谢。虽然这解决了眼前的问题,但OP会在每次超时时得到
4
作为输出。我知道这不是问题所在,但你最好尝试本垒打:)这帮了大忙。谢谢。OP,您是否希望工作代码一秒接一秒地记录0-3?OP,您是否希望工作代码一秒接一秒地记录0-3?