递归setInterval()连续运行

时间:2013-09-08 19:32:19

标签: javascript recursion setinterval

我正在尝试使用JavaScript使用递归的setInterval函数每5秒运行一次函数。

以下代码只是尽可能快地记录“已启动”,然后崩溃浏览器。为什么这不是每5秒钟运行一次?

function five() {
console.log("five");
setInterval(five(), 5000);
}
five();

4 个答案:

答案 0 :(得分:15)

不要以这种方式使用setInterval。使用setTimeout。通过调用setInterval,每次调用函数时都会创建一个UNIQUE定时器。 SetTimeout将创建一个结束的计时器,然后创建一个新的计时器。

您还应该更改引用five的方式。 five()立即执行该功能。只需five传递一个函数引用,如下所示。

function five() {
    console.log("five");
    setTimeout(five, 5000);
}
five();

当然,您始终可以将函数调用作为要评估的字符串传递:

    setTimeout("five()", 5000); // note the quotes

但这通常被认为是不好的做法。

答案 1 :(得分:7)

立即调用 five,而不仅仅是传递

function five () {
    console.log("five");
}
setInterval(five, 5000);
/*              ^     */

答案 2 :(得分:3)

更改此行:

setInterval(five(), 5000);
像这样:

setInterval(five, 5000);

但看起来你真正需要的是:

setTimeout(five, 5000);

所以你的代码看起来像是:

function five() {
   console.log("five");
   setTimeout(five, 5000);
}
five();

答案 3 :(得分:0)

崩溃的原因是你正在调用函数 five 。而不是你应该把它作为参数传递。

setInterval(five, 5000);