7

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

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

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

4 回答 4

17

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

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

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

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

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

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

于 2013-09-08T19:35:35.640 回答
8

您立即致电 five,而不仅仅是其传入:

function five () {
    console.log("five");
}
setInterval(five, 5000);
/*              ^     */
于 2013-09-08T19:33:10.673 回答
3

更改此行:

setInterval(five(), 5000);

像这样:

setInterval(five, 5000);

但似乎你真正需要的是:

setTimeout(five, 5000);

所以你的代码看起来像:

function five() {
   console.log("five");
   setTimeout(five, 5000);
}
five();
于 2013-09-08T19:33:39.510 回答
0

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

setInterval(five, 5000);
于 2013-09-08T19:34:37.727 回答