Javascript 具有在运行时更改的参数的超时函数
我正在尝试以下方法:Javascript 具有在运行时更改的参数的超时函数,javascript,parameters,intervals,Javascript,Parameters,Intervals,我正在尝试以下方法: var timeout = 300; var colors = ['aqua', 'limegreen'] for (var i=0; i < 4; ++i) { console.log(colors[i % colors.length]); setTimeout(function() { changeColor(colors[i % colors.length]) }, i * timeout); } function changeColor(co
var timeout = 300;
var colors = ['aqua', 'limegreen']
for (var i=0; i < 4; ++i) {
console.log(colors[i % colors.length]);
setTimeout(function() { changeColor(colors[i % colors.length]) }, i * timeout);
}
function changeColor(color) {
console.log(color);
}
好吧,我现在有一个解决办法,有一个有效的时间间隔……但既然我在这里学习……超时是如何完成的?您遇到了关闭问题;已捕获对
i
值的引用,因此所有函数都包含相同的值。您需要执行以下操作,以便在调用时捕获i
的引用:
for(var i = 0; i < 4; i++)
{
(function(index)
{
setTimeout(function()
{
changeColor(colors[index & colors.length]);
}, index * timeout);
})(i)
}
for(变量i=0;i<4;i++)
{
(功能(索引)
{
setTimeout(函数()
{
更改颜色(颜色[索引和颜色.长度]);
},索引*超时);
})(一)
}
当for循环已经结束时,将执行调用changeColor
的匿名函数。所以它将等于它得到的最后一个值。要防止这种情况,请使用匿名函数包装对setTimeout的调用,从而捕获闭包中所需的值:
for (var i=0; i < 4; ++i) {
console.log(colors[i % colors.length]);
(function(i){
setTimeout(function() { changeColor(colors[i % colors.length]) }, i * timeout);
})(i);
}
for(变量i=0;i<4;++i){
log(颜色[i%colors.length]);
(职能(一){
setTimeout(函数(){changeColor(colors[i%colors.length])},i*timeout);
})(i) );
}
可能的重复当然也可以(至少用模代替&;)。谢谢你,太好了。我应该自己去抓的东西。谢谢你,比约德!
for (var i=0; i < 4; ++i) {
console.log(colors[i % colors.length]);
(function(i){
setTimeout(function() { changeColor(colors[i % colors.length]) }, i * timeout);
})(i);
}