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

我做了这个计数器,但是我想让它永远运行下去,这很简单,我做错了什么?

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


window.setInterval(timer(), 1000)
59519 次浏览

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

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


window.setInterval(timer, 1000);

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

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

setIntervalsetTimeout 必须的与回调函数一起使用,如:

setInterval(timer, 1000);

或未命名的功能:

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

为什么你的代码无法工作——当你把一个函数作为参数传递给另一个带括号的函数,例如 doSomething ( someFunc() ),你就是在传递函数的结果。

当函数作为对象传递时,例如 doSomething ( someFunc ),你传递的是一个回调函数。这样,someFunc作为引用传递,并在调用函数中的某个位置执行。这与其他语言中指向函数的指针相同。

一个常见的错误是使用这两个函数,如 W3学校所示。这将对 eval进行隐式调用。