为什么 setInterval 回调只执行一次?

IT技术 javascript callback setinterval
2021-02-07 01:10:47

我有我制作的这个计数器,但我希望它永远运行,这真的很简单,我在这里做错了什么?

function timer() {
  console.log("timer!")
}

window.setInterval(timer(), 1000)
2个回答

您使用函数调用而不是函数引用作为 setInterval 的第一个参数。像这样做:

function timer() {
  console.log("timer!");
}

window.setInterval(timer, 1000);

或者更短(但是当函数变大时,可读性也会降低):

window.setInterval( function() {
  console.log("timer!");
}, 1000)
答案正确指出回调函数不应在参数中包含“()”。
2021-03-13 01:10:47
根据developer.mozilla.org/en/Extensions/...,较短的版本可能会导致内存泄漏。
2021-03-21 01:10:47
您不能使用 setInterval,但您可以使用 setTimeout 函数来模拟这一点。
2021-03-31 01:10:47
@CrendKing 两个版本都具有完全相同的“问题”(也就是针对扩展程序,不会影响普通网页/JS),因为重要的是对象生命周期
2021-04-02 01:10:47
这就是我说“可能”的原因,因为 OP 没有指定他的用例。请注意它是否是从 Mozilla 扩展中提取的。
2021-04-09 01:10:47

setInterval并且setTimeout 必须与回调一起使用,例如:

setInterval(timer, 1000);

或未命名的函数:

setInterval( function() { console.log("timer!"); }, 1000 );

为什么您的代码不起作用 - 当您将一个函数作为参数传递给另一个带括号的函数时,例如doSomething ( someFunc() )您正在传递函数的结果。

当函数作为对象传递时,例如doSomething ( someFunc )您正在传递回调。这种方式someFunc作为引用传递,并在调用函数的某处执行。这与其他语言中的函数指针相同。

一个常见的错误是使用w3schools 中显示的这两个函数这对 进行了隐式调用eval