Почему обратный вызов setInterval выполняется только один раз?


У меня есть этот счетчик, который я сделал, но я хочу, чтобы он работал вечно, это действительно просто, что я делаю неправильно здесь?

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

window.setInterval(timer(), 1000)
2 55

2 ответа:

вы использовали вызов функции вместо ссылки на функцию в качестве первого параметра метода setInterval. Сделайте это так:

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

window.setInterval(timer, 1000);

или короче (но когда функция становится больше и менее читаемой):

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

setInterval и setTimeoutдолжны используется с обратными вызовами, например:

setInterval(timer, 1000);

или безымянные функции:

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

почему ваш код не работает - при передаче функции в качестве аргумента другой функции со скобками, например,doSomething ( someFunc() ) вы передаете результат функции.

когда функция передается как объект, например doSomething ( someFunc ) вы передаете обратный вызов. Сюда someFunc передается как ссылка и выполняется где-то в вызывающая функция. Это то же самое, что и указатели на функции в других языках.

распространенной ошибкой является использование этих двух функций, как показано на w3schools. Это делает неявный вызов eval.