递归 setInterval() 连续运行

Recursive setInterval() runs continuously

本文关键字:连续 运行 setInterval 递归      更新时间:2023-09-26

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

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

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

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

您还应该更改引用five 的方式。 five()立即执行该函数。只需five传递一个函数引用,因此请按照下面看到的方式进行操作。

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

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

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

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

您立即调用five,而不仅仅是将其传入

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

更改此行:

setInterval(five(), 5000);

喜欢这个:

setInterval(five, 5000);

但似乎您真正需要的是:

setTimeout(five, 5000);

因此,您的代码将如下所示:

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

崩溃的原因是你正在调用函数。相反,您应该将其作为参数传递。

setInterval(five, 5000);