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