Page 220 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 220

}  ,  ( 5 - i )   * 1 0 0 0 ) ;
           } )  ( i ) ;


          Как много скобок! Если проанализировать их, то можно заметить, что здесь про­
       исходит то же самое: мы создаем функцию, которой передается один аргумент, и она
       вызывается на каждом шаге цикла (рис. 1 3 . 1 ) .


                                  var  i ;
                                             O
                                   for( i =S ;  i> ;   i-- )  {
                                      ( f unction( i )   {
                                          setTimeout ( f unction ( )   {
         var  i ;                             console. log ( i===O  ?  "Старт! "    i ) ;
                    O
         for( i =S ;  i> ;   i-- )  {     } ,  ( 5 -i ) * lOOO ) ;
                    y
             loopBod ( i ) ;          } ) ( i ) ;
         }                         }
                    Вызов именованной функции заменен анонимной
                  Рис. 13. 1 .   Немедленно вызываемое функциональное выражение

          Переменные области видимости блока решают эту задачу без введения дополни­
       тельной функции, чтобы создать новую область видимости. Использование перемен -
       ных области видимости блока существенно упрощает этот пример.

       for ( l et  i=5 ;  i > O ;   i - - )    (
           setTimeout ( f unction ( )
               console . l og ( i===O ?  "Старт ! "    i ) ;
           } ,  ( 5 - i )   * 1 0 0 0 ) ;


          Обратите внимание, что мы используем ключевое слово let в аргументах цикла
       for. Если бы мы поместили его вне цикла for, у нас была бы та же проблема, что
       и прежде. Таким образом, использование ключевого слова let сообщает JavaScript,
       что на каждом этапе  цикла должна быть новая, независимая копия переменной i .
       В  результате, когда функции, переданные  s e t T i meout, выполняются в  будущем,
       они каждый раз получают свое значение переменной в ее собственной области ви­
       димости.


                                  и
       П е ременные функц й
          Если вы новичок в программировании, можете налить себе еще кофе2 и усесть­
       ся поудобнее: в этом разделе рассматривается концепция, которая очень важна, но
       у новичков зачастую вызывает затруднения.


       2 Имеется в виду композиция "Another Cup of Coffe e" группы Mike And The Mechanics.  - П р имеч. ред.

                                                            Переменные функций   223
   215   216   217   218   219   220   221   222   223   224   225