如何立即启动setInterval循环?

Goo*_*bot 49 javascript jquery setinterval

简单来说 setInterval

setInterval(function() {
      // Do something every 9 seconds
}, 9000);
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Sal*_*n A 113

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

function doSomething() {
    console.log("tick");
}
doSomething();
setInterval(doSomething, 9000);
Run Code Online (Sandbox Code Playgroud)

必要时创建范围:

(function() {
    function doSomething() {
        console.log("tick");
    }
    doSomething();
    setInterval(doSomething, 9000);
})();
Run Code Online (Sandbox Code Playgroud)

最后,以下工作无需创建或影响x:

setInterval(function x() {
    console.log("tick");
    return x;
}(), 9000);
Run Code Online (Sandbox Code Playgroud)


ale*_*lex 20

有时我使用这种模式......

(function me() {
    // Do something every 9 seconds

    setTimeout(me, 9000);
})();
Run Code Online (Sandbox Code Playgroud)

它并不完全相同,因为它会等到执行某些操作然后等待~9秒再次调用它.但是,这通常很有用,因此事件队列上的事件不会不必要地堆叠(但不太可能是某些代码需要9秒才能运行:)

请注意,在较旧的IE中,me将泄漏到外部范围.


Ric*_*ard 17

setInterval()是一个非常难看的函数.我使用这个清理版本,它会立即调用该函数,并在几秒钟内花费时间,在函数参数之前,因此使用内联函数定义调用它实际上看起来很合理.

function startInterval(seconds, callback) {
  callback();
  return setInterval(callback, seconds * 1000);
}
Run Code Online (Sandbox Code Playgroud)


epa*_*llo 5

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

var myFnc = function() {
    // Do something every 9 seconds
};
setInterval(myFnc, 9000);
myFnc();
Run Code Online (Sandbox Code Playgroud)

另一种选择是使用 setTimeout 代替。

var myFnc = function() {
    // Do something every 9 seconds
    setTimeout(myFnc, 9000);
};
myFnc();
Run Code Online (Sandbox Code Playgroud)

  • 这不是一个命名函数。它是分配给变量的匿名函数。*变量* 有一个名称,而该函数没有(这对于您正在做的事情来说很好,除了一些调试器无法在调用堆栈中向您显示有用的名称等[其他调试器可以,最新的Chrome 开发工具和 Firebug 非常聪明])。 (4认同)