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 . Асинхронное программирование
   226   227   228   229   230   231   232   233   234   235   236