这是我的代码:
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
。
有什么想法吗?
答案 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);
}
}