Подтвердить что ты не робот

SetInterval обратный вызов работает только один раз

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

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

window.setInterval(timer(), 1000)
4b9b3361

Ответ 1

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

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

window.setInterval(timer, 1000);

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

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

Ответ 2

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

setInterval(timer, 1000);

или неназванные функции:

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

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

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

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