SetInterval обратный вызов работает только один раз
У меня есть этот счетчик, который я сделал, но я хочу, чтобы он работал вечно, это действительно просто, что я делаю неправильно здесь?
function timer() {
console.log("timer!")
}
window.setInterval(timer(), 1000)
Ответы
Ответ 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
.