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

ant*_*njs 2 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.

有任何想法吗?

Fel*_*ing 7

典型地在循环问题中创建函数.您传递的所有闭包setTimeout都具有对同一 rcdi变量的引用.在循环内定义变量与在外部定义变量相同:

var rcdi;
for(var c=0; c < 5; c++){
    rcdi = "rcd_"+c+"";
    // ...
}
Run Code Online (Sandbox Code Playgroud)

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

您必须引入一个新的范围,在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);
  }
}
Run Code Online (Sandbox Code Playgroud)

正如您在其他答案中看到的那样,您也可以使用即时功能.使用您觉得更具可读性的内容.