Javascript 异步(设置超时)lambda不';不要使用正确的输入

Javascript 异步(设置超时)lambda不';不要使用正确的输入,javascript,asynchronous,settimeout,lambda,Javascript,Asynchronous,Settimeout,Lambda,我在xmlHTTPRequest回调函数的回调中得到了以下代码: // some more code before ... // schedule the UI update var totSteps = 6; for(var i = 0; i < listChangeEl.length; ++i) { // callback pulse function var curPulse = function cell_pulse(elName, curCnt) { conso

我在
xmlHTTPRequest
回调函数的回调中得到了以下代码:


// some more code before
...
// schedule the UI update
var totSteps = 6;
for(var i = 0; i < listChangeEl.length; ++i) {
  // callback pulse function
  var curPulse = function cell_pulse(elName, curCnt) {
    console.log("Accessing element: " + elName);
    var curEl = document.getElementById(elName);
    console.log("Element: " + elName + " = " + curEl);
    var curColor = RGB2HTML(255, 255*(curCnt/totSteps), 255*(curCnt/totSteps));
    if(curCnt < totSteps) {
      // recursion here!
      setTimeout( function(){ cell_pulse(elName, curCnt+1); }, 125);
    }
  };
  // start it!
  setTimeout( function() { (curPulse)(listChangeEl[i], 0); }, 125);
}

//之前有更多的代码吗
...
//计划UI更新
var-totSteps=6;
对于(变量i=0;i
显然,当上面是
setTimeout(function(){(curPulse)(listChangeEl[i],0);},125)时,
listChangeEl[i]
确实包含我要更新的单元格的正确id,但是,在第一次执行
函数cell\u pulse
时,参数elName未定义

我做错了什么?Javascript是否正确管理lambda

谢谢,

Ema

i不是闭合的,因此这不是由来已久的循环范围问题。。。请注意,由于您的函数是在循环之后运行的,因此当curPulse()执行时,我将始终是listChangeEl.length。。。基本上,如果我使用弦乐技巧,我可以做到。。。但我想我也会尝试在你的链接中提出的解决方案。。不过…哎呀,最后还是漏掉了额外的“}”。只需将“(函数(i){”添加到循环的顶部,并将“}(i));”添加到循环的末尾。。。