连续每5秒调用一次javascript函数

dee*_*ria 91 javascript dom-events

可能重复:
每60秒调用一次函数

每隔5秒连续调用一次javascript函数.我见过setTimeOut事件.如果我想连续不断,它会正常工作吗?

Ana*_*rma 166

你可以使用setInterval(),参数是一样的.

const interval = setInterval(function() {
   // method to be executed;
 }, 5000);

clearInterval(interval); // thanks @Luca D'Amico
Run Code Online (Sandbox Code Playgroud)


She*_*hef 77

setTimeout对你的函数进行"递归" 处理,它将在每个定义的时间内继续执行:

function yourFunction(){
    // do whatever you like here

    setTimeout(yourFunction, 5000);
}

yourFunction();
Run Code Online (Sandbox Code Playgroud)

  • @KarlMorrison不,使用`setInterval`会导致内存泄漏.通过使用`setTimeout`,确保下一个函数调用不会被触发**直到**前一个函数调用完成. (6认同)
  • 我很好奇,这最终会导致内存泄漏吗? (3认同)
  • 我们如何摆脱这种局面? (2认同)
  • @SarasArya 很容易,您可以在函数范围之外拥有一个保存状态的变量。然后,在再次在函数内设置超时之前,进行 IF 检查。所以,根据你需要的逻辑,你根据需要设置超时或不超时。 (2认同)

Jos*_*eti 25

正如最佳编码实践建议的那样,使用setTimeout而不是setInterval.

function foo() {

    // your function code here

    setTimeout(foo, 5000);
}

foo();
Run Code Online (Sandbox Code Playgroud)

请注意,这不是递归函数.该函数在结束之前没有调用自身,它调用的setTimeout函数稍后将再次调用相同的函数.

  • 这也会在第一次立即执行代码,而 setInterval 首先等待。 (2认同)

gio*_*_13 17

为了在将来重复某个动作,setInterval 可以使用内置函数代替setTimeout.
它有一个类似的签名,所以从一个到另一个的过渡很简单:

setInterval(function() {
    // do stuff
}, duration);
Run Code Online (Sandbox Code Playgroud)


Ila*_*sda 5

此处的良好工作示例:http : //jsfiddle.net/MrTest/t4NXD/62/

加:

  • 有很好的fade in / fade out动画
  • 会暂停 :hover
  • 将阻止运行多个动作(在第二秒开始之前完成运行动画)
  • 在选项卡中时将防止损坏(浏览器在选项卡中停止脚本)

经过测试,可以正常工作!