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

时间:2012-04-16 22:40:00

标签: javascript callback setinterval

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

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

window.setInterval(timer(), 1000)

2 个答案:

答案 0 :(得分:97)

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

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

window.setInterval(timer, 1000);

或者更短(但是当函数变得更大而且可读性更差时):

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

答案 1 :(得分:9)

setIntervalsetTimeout 必须与回调一起使用,例如:

setInterval(timer, 1000);

或未命名的功能:

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

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

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

常见的错误是使用w3schools所示的这两个功能。这会对eval进行隐式调用。