如何立即启动setInterval循环?

在一个简单的setInterval

 setInterval(function() { // Do something every 9 seconds }, 9000); 

第一个动作将在9秒后发生( t=9s )。 如何强制循环立即执行第一个动作( t=0 )?

我认为这是由于setInterval的机制有Delay - Action - Delay - Action ...循环; 而不是Action - Delay - Action - Delay ...循环。

编辑:我的function确实是一个循环

 setInterval(function(){ $('.test').each(function(idx){ var duration = 1000; $(this).delay(duration*idx); Some stuff here }); }, 4000); 

把事情简单化。 您可以使用命名函数而不是匿名函数; 调用它并设置一个间隔。

 function doSomething() { } doSomething(); setInterval(doSomething, 9000); 

有时我使用这种模式…

 (function me() { // Do something every 9 seconds setTimeout(me, 9000); })(); 

这不完全相同,因为它会等待,直到等待〜9秒后再执行一次。 但是,这通常是有用的,所以事件队列上的事件不会不必要地叠加起来(不过不太可能是一些代码需要9秒才能运行:)

请注意,在较旧的IE浏览器中, me将泄漏到外部范围。

setInterval()是一个非常丑陋的函数。 我使用这个消毒版本,它立即调用函数,并花费时间在几秒钟之前,函数参数,所以用内联函数定义调用它实际上看起来是明智的。

 function startInterval(seconds, callback) { callback(); return setInterval(callback, seconds * 1000); } 

使用一个命名函数并调用它并将其分配给间隔。

 var myFnc = function() { // Do something every 9 seconds }; setInterval(myFnc, 9000); myFnc(); 

另一个select是使用setTimeout来代替。

 var myFnc = function() { // Do something every 9 seconds setTimeout(myFnc, 9000); }; myFnc();