关闭时预期的函数名称

时间:2016-04-09 00:14:23

标签: javascript

我有以下代码:

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

我收到错误&#39;预计功能名称&#39;关于第二个功能。我不明白为什么我不能在这里使用匿名功能。

3 个答案:

答案 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();

DEMO