我正在尝试使用JavaScript使用递归的setInterval函数每5秒运行一次函数。
以下代码只是尽可能快地记录“已启动”,然后崩溃浏览器。为什么这不是每5秒钟运行一次?
function five() {
console.log("five");
setInterval(five(), 5000);
}
five();
答案 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);