Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript SetTimeout无法正常工作_Javascript_Jquery_For Loop_Settimeout_Cleartimeout - Fatal编程技术网

Javascript SetTimeout无法正常工作

Javascript SetTimeout无法正常工作,javascript,jquery,for-loop,settimeout,cleartimeout,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 time

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

};
var指数=1;
var switchBG=函数(num){
if(num<22){
console.log('index'+索引);
console.log('num'+num);
索引++;
功能定时器(索引);
}
};
无功定时器;
变量函数\定时器=函数(索引){
清除超时(计时器);
定时器=设置超时(开关bg(索引),10000);
};

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

timer = setTimeout(function() {
    switchBG(index);
}, 10000);
执行
setTimeout(开关bg(索引),10000)基本上计算
开关bg(index)
,并将其返回值(当前为
未定义的
)传递到
设置超时
,执行以下操作时:

setTimeout(switchBG(index), 10000);
您正在立即调用
switchBG(index)
,然后将其返回值(未定义)传递给
setTimeout
。相反,您希望传递一个函数引用,然后将附加参数传递给
setTimeout

setTimeout(switchBG, 10000, index);
如果要在Internet Explorer中使用类似的
setTimeout
的附加参数,则需要使用它。它可以在没有垫片的其他浏览器中工作

如果您想支持IE而不想使用垫片,可以创建一个额外的匿名函数来实现相同的结果:

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