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

问题描述 投票:0回答:2

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

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

window.setInterval(timer(), 1000)
javascript callback setinterval
2个回答
129
投票

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

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

window.setInterval(timer, 1000);

或更短(但是当函数变大时可读性也较差):

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

或者更短,使用 箭头函数表达式:

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

14
投票

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

setInterval(timer, 1000);

或未命名函数:

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

为什么你的代码不起作用 - 当你将一个函数作为参数传递给另一个带括号的函数时,例如

doSomething ( someFunc() )
您正在传递函数的结果。

当函数作为对象传递时,例如

doSomething ( someFunc )
您正在传递回调。这样
someFunc
作为引用传递,并在调用函数中的某个位置执行。这与其他语言中的函数指针相同。

一个常见的错误是使用这两个函数,如w3schools所示。这会隐式调用

eval

© www.soinside.com 2019 - 2024. All rights reserved.