在 for 循环中设置间隔,传递参数

SetInterval in a for loop , passing parameters

本文关键字:参数 for 循环 设置      更新时间:2023-09-26
    var flag = true;
     function changeColor (element) {
        if(flag==true){
           document.getElementById(NAME+element).style.background="red";
           flag=false;
       }
       else if (flag==false){
           document.getElementById(NAME+element).style.background="white";
           flag = true;
     }
   }
    var temp;
    for(var i=0;i<elements_array.length;i++)
    {
      alert("VAL="+elements_array[i]);
      temp = elements_array[i];
      setInterval(function() { changeColor(temp); } ,300);
    }

上面的代码仅适用于最后一个值。我正在尝试更改从整数数组(elements_array(获得的特定单元格的颜色。

在警报中,我正确获取数组值,例如 2,5,8。但只有第 8 个(最后一个(正在改变颜色。

但是,如果我将值硬编码为以下内容,则所有单元格都会改变颜色。

 setInterval(function() { changeColor(2); } ,300);
 setInterval(function() { changeColor(5); } ,300);
 setInterval(function() { changeColor(8); } ,300);

关于为什么循环不起作用的任何想法?谢谢

实际上,您的代码在for循环的所有迭代中引用相同的temp变量。这样,setInterval函数的所有实例都将传递相同的引用,从而传递相同的值(在执行传递给setInterval的函数时(。

要解决此问题,请使用类似于以下函数的内容来创建setInterval的回调

function createCB( val ) {
  return function(){
    changeColor( val );
  };
}

并将您的setInterval呼叫相应地更改为

setInterval( createCB( temp ),300 );

附加函数调用实际上会复制您的temp值,从而将不同的值传递给每次调用changeColor