-1

此代码一次运行所有 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);

};
4

2 回答 2

3

您需要将函数作为参数传递给setTimeout. 尝试这个:

timer = setTimeout(function() {
    switchBG(index);
}, 10000);

DoingsetTimeout(switchBG(index), 10000);基本上评估switchBG(index)并将其返回值(当前为undefined)传递给setTimeout.

于 2014-04-24T20:41:33.990 回答
0

当你这样做时:

setTimeout(switchBG(index), 10000);

switchBG(index)立即调用,然后将其返回值(即undefined)传递给setTimeout. 相反,您想传递一个函数引用,然后将附加参数传递给setTimeout

setTimeout(switchBG, 10000, index);

如果您想使用其他参数来setTimeout使其在 Internet Explorer 中工作,则需要对其进行填充。它可以在没有 shim 的情况下在所有其他浏览器中运行。

如果你想支持 IE 并且不想使用 shim,你可以创建一个额外的匿名函数来达到同样的效果:

setTimeout(function(){ switchBG(index); }, 10000);
于 2014-04-24T20:49:54.397 回答