此代码同时运行所有21个控制台日志。但是,它应该以设定的间隔一次运行一个任何建议吗?
var index = 1;
var switchBG = function(num){
if( num < 22 ){
console.log('index' + index);
console.log('num' + num);
index++;
function_timer(index);
}
};
var timer;
var function_timer = function(index){
clearTimeout(timer);
timer = setTimeout(switchBG(index), 10000);
};
答案 0 :(得分:3)
您需要将函数作为参数传递给setTimeout
。试试这个:
timer = setTimeout(function() {
switchBG(index);
}, 10000);
执行setTimeout(switchBG(index), 10000);
基本上会评估switchBG(index)
并将其返回值(目前为undefined
)传递给setTimeout
。
答案 1 :(得分:0)
当你这样做时:
setTimeout(switchBG(index), 10000);
您立即致电switchBG(index)
,然后将其返回值(undefined
)传递给setTimeout
。相反,您希望传递函数引用,然后将其他参数传递给setTimeout
:
setTimeout(switchBG, 10000, index);
如果您想使用setTimeout
这样的其他参数在Internet Explorer中工作,您需要shim它。它可以在没有垫片的情况下在其他所有浏览器中运行。
如果你想支持IE并且不想使用垫片,你可以创建一个额外的匿名函数来实现相同的结果:
setTimeout(function(){ switchBG(index); }, 10000);