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

这是我的代码:

 function addRcd2(timeOut){  
   for(var c = 0; c less 5; c ++){
     var rcdi =“rcd _”+ c +“”;
    的setTimeout(函数(){
       $('。tbl1 tbody')。append(rcdi);
     },超时* C);
   }
 }

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

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

有任何想法吗?

典型地在循环问题中创建函数 。 传递给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); } } 

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

 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); } }