如何将参数传递给setTimeout调用中定义的匿名函数?

时间:2011-06-18 12:49:26

标签: javascript jquery

这是我的代码:

function addRcd2(timeOut){  
  for(var c=0; c less 5; c++){
    var rcdi = "rcd_"+c+"";
    setTimeout(function(){
      $('.tbl1 tbody').append(rcdi);
    },timeOut*c);
  }
}

此代码的输出是一个表,其行具有相同的文本rcd_5

我的目标是让表行具有不同的记录rcd_1,...,rcd_5

有什么想法吗?

2 个答案:

答案 0 :(得分:7)

典型的在循环问题中创建函数。您传递给setTimeout的所有关闭都引用了相同 rcdi变量。在循环中定义变量与在外部定义变量相同:

var rcdi;
for(var c=0; c < 5; c++){
    rcdi = "rcd_"+c+"";
    // ...
}

这使得你在这里只处理一个变量更加明显。

您必须引入一个新的范围,在JavaScript中只能通过函数来​​实现:

function getCallback(val) {
    return function(){
      $('.tbl1 tbody').append(val);
    };
}

function addRcd2(timeOut){  
  for(var c=0; c < 5; c++){
    setTimeout(getCallback("rcd_"+c),timeOut*c);
  }
}

正如您在其他答案中所看到的,您还可以使用立即功能。使用您觉得更具可读性的内容。

答案 1 :(得分:2)

function addRcd2(timeOut){  
  for(var c=0; c less 5; c++){
    var rcdi = "rcd_"+c+"";
    setTimeout((function(x) {
      return function(){
        $('.tbl1 tbody').append(x);
      };
    })(rcdi),timeOut*c);
  }
}