Page 231 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 231
функций, особенно если они длинны, его можно легко потерять, или он будет вы -
глядеть, как часть функции. Это достаточно распространенное явление, поэтому
вы должны привыкнуть к использованию функции setTimeout (и ее компаньон
ки set interval) с анонимными функциями. Только не забывайте, что в последней
строке содержится параметр задержки!
Функции setinterval и clearinterval
Кроме функции setTimeout, которая запускает свою функцию один раз и оста
навливается, есть функция setinterval, которая запускает функцию обратного вы
зова через определенный интервал времени бесконечно или пока вы не вызовете
функцию clearinterval. Вот пример, в котором код запускается каждые 5 секунд
1
в течение одной минуты, или 0 раз, если это произойдет раньше.
const start = new Date ( ) ;
O
let i= ;
const intervalid = setin e rval ( function ( )
t
let now = new Date ( ) ;
>
i f ( n ow . getMinutes ( ) ! = = start . getMinutes ( ) 1 1 ++i l O )
return clearinterval ( intervalid) ;
console . l og ( ' $ { i } : $ { n ow } ' ) ;
} ' 5 * 1 0 0 0 ) ;
Здесь мы видим, что setinterval возвращает идентификатор, который впослед
ствии можно использовать для отмены режима интервального запуска кода. Есть со
ответствующая функция clearTimeout, которая работает так же и позволяет сбро
сить интервал времени и предотвратить запуск кода.
Функции setTimeout, se i nterval и clearinterval определены
t
в глобальном объекте (window в браузере и global в Node).
Область в и димости и а с и н хронн о е в ы п олн е н и е
Распространенным источником беспорядка (и ошибок) в асинхронном выполне
нии является то, как области видимости и замкнутые выражения влияют на асин -
хронное выполнение. Каждый раз, вызывая функцию, вы создаете замкнутое выра
жение: все переменные, которые создаются в функции (включая аргументы), сущес
твуют, пока что-то может к ним обращаться.
Мы видели этот пример прежде, но его имеет смысл повторить для важного уро
ка, который мы можем из него извлечь. Рассмотрим пример функции countdown.
Наша цель - создать 5-секундный обратный отсчет.
function countdown ( } {
let i ; / / заметьте, что мы объявляем let за пределами цикла for
234 Глава 1 4 . Асинхронное программирование

