SetTimeout无法正常运行

时间:2014-04-24 20:38:27

标签: javascript jquery for-loop settimeout cleartimeout

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

};

2 个答案:

答案 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);