重复setTimeout

我正在尝试每10秒重复setTimeout 。 我知道setTimeout默认情况下只会等待,然后执行一次操作。 我怎样才能重复这个过程?

 setTimeout(function() { setTimeout(function() { console.log("10 seconds"); }, 10000); }, 10000); 

也许你应该使用setInterval()

setInterval()可能是你要找的东西,但是如果你想用setTimeout()得到同样的效果:

 function doSomething() { console.log("10 seconds"); setTimeout(doSomething, 10000); } setTimeout(doSomething, 10000); 

或者,如果你不想声明一个单独的函数,并想要坚持一个函数expression式,你需要使它成为一个命名的函数expression式:

 setTimeout(function doSomething() { console.log("10 seconds"); setTimeout(doSomething, 10000); }, 10000); 

(如果您不介意使用已弃用的语言function,请使用arguments.callee 。)

根据我setInterval()是你的情况最好的方法。
这里是一些代码:

  setInterval(function() { //your code }, 10000); // you can change your delay by changing this value "10000". 

与@nnnnnn和@uzyn提供的答案不同,我劝阻你不要使用setInterval来理解下面的答案 。 而应使用以下Delta Time脚本:

 function DeltaTimer(render, interval) { var timeout; var lastTime; this.start = start; this.stop = stop; function start() { timeout = setTimeout(loop, 0); lastTime = + new Date; return lastTime; } function stop() { clearTimeout(timeout); return lastTime; } function loop() { var thisTime = + new Date; var deltaTime = thisTime - lastTime; var delay = Math.max(interval - deltaTime, 0); timeout = setTimeout(loop, delay); lastTime = thisTime + delay; render(thisTime); } } 

上面的脚本运行给定的render函数尽可能接近指定的interval ,并回答你的问题,它使用setTimeout重复一个过程。 在你的情况下,你可以做一些事情如下:

 var timer = new DeltaTimer(function (time) { console.log("10 seconds"); }, 10000); var start = timer.start(); 

这是一个使用setTimeout的函数,它尝试将自己调用的时间尽量靠近一个固定的时间间隔。 如果你看输出,你可以看到时间漂移和重置。

 <script type="text/javascript"> function Timer(fn, interval) { this.fn = fn; this.interval = interval; } Timer.prototype.run = function() { var timer = this; var timeDiff = this.interval; var now = new Date(); // Date.now is not supported by IE 8 var newInterval; // Only run if all is good if (typeof timer.interval != 'undefined' && timer.fn) { // Don't do this on the first run if (timer.lastTime) { timeDiff = now - timer.lastTime; } timer.lastTime = now; // Adjust the interval newInterval = 2 * timer.interval - timeDiff; // Do it timer.fn(); // Call function again, setting its this correctly timer.timeout = setTimeout(function(){timer.run()}, newInterval); } } var t = new Timer(function() { var d = new Date(); document.getElementById('msg').innerHTML = d + ' : ' + d.getMilliseconds(); }, 1000); window.onload = function() { t.run(); }; </script> <span id="msg"></span> 

使用jQuery,这是你可以做的:

 function updatePage() { var interval = setTimeout(updatePage, 10000); // 10' Seconds $('a[href]').click(function() { $(this).data('clicked', true); clearInterval(interval); // Clears Upon Clicking any href Link console.log('Interval Cleared!'); }); // REPLACE 'YOUR_FUNCTION_NAME' function you would like to execute setTimeout(YOUR_FUNCTION_NAME, 500); } // Function updatePage close syntax updatePage(); // call the function again.