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)' –