У меня есть этот счетчик, который я сделал, но я хочу, чтобы он работал вечно, это очень просто, что я здесь делаю неправильно?
function timer() {
console.log("timer!")
}
window.setInterval(timer(), 1000)
У меня есть этот счетчик, который я сделал, но я хочу, чтобы он работал вечно, это очень просто, что я здесь делаю неправильно?
function timer() {
console.log("timer!")
}
window.setInterval(timer(), 1000)
Вы использовали вызов функции вместо ссылки на функцию в качестве первого параметра 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
.
timer()
вызывает объект-функцию, полученную в результате оценкиtimer
, а затем передает результат (undefined
) вsetTimeout
. Так что не вызывайте его. Вместо этого просто передайте объект-функцию:setInterval(timer, 1000)
- person   schedule 17.04.2012