Javascript SetTimeout无法正常工作
此代码同时运行所有21个控制台日志。但是,它应该以设定的间隔一次运行一个,有什么建议吗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
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);