在 for 循环中设置间隔,传递参数
SetInterval in a for loop , passing parameters
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
。
相关文章:
- JS for循环来设置HTML对象参数
- 如何动态使用for循环,将具有不同参数的函数推送到数组中
- 如何避免在将索引作为函数的参数发送时引用for循环中的最后一个索引
- 将 for 循环参数传递到每个语句中
- 将多个语句放在“for”参数中
- 在 foreach 中使用 $data for 组件参数进行挖空
- 如何使用for循环将每个参数循环到newDate中
- 在 for 循环中设置间隔,传递参数
- 在 Array.prototype 中传递“for each”循环的参数的语法是什么?
- For循环不使用JavaScript函数的参数
- angular 2错误:Can't resolve for FormGroup的所有参数
- 在for中传递onClick的动态参数不起作用
- 在for-of循环中使用多个参数的ES6数组销毁
- 如何向jquery for循环传递多数组参数
- 为什么不能在for循环中向函数传递参数?
- 如何在for循环中组织承诺,并在javascript函数之间传递参数
- 在for循环中将参数传递给setTimeout
- 在Javascript中,对for循环的每个参数都有多个操作
- 如何将范围变量值作为 FormName 传递给 ng-click 参数并获取 FormName.$valid 和 For
- 在for语句后面创建变量时,参数列表后面缺少)