繁体   English   中英

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

[英]How to pass parameter to an anonymous function defined in the setTimeout call?

这是我的代码:

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

有任何想法吗?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM