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

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


       Функции являются объектами
          В JavaScript функции являются экземплярами объекта Function. С практической
       точки зрения это никак не влияет на то, как вы их используете; это просто информа­
       ция к размышлению. Заслуживает внимания то, что, если вы попытаетесь идентифи­
       цировать тип переменной v, оператор typeof  v возвратит для функций " f unction".
       Это весьма разумно, в  отличие от случая,  когда v  является массивом: он возвра­
       тит " o bj ect" .   В результате вы можете использовать оператор typeof  v  для иден­
       тификации функции.  Обратите, однако,  внимание,  что если  v  - это функция, то
       v  instanceof  Obj ect  даст истину.  Поэтому, если вам нужно отличать функции
       от объектов других типов, то для проверки сначала используйте оператор typeof.


       Немедленно вызываемое функциональное
       выраж н и е   и асинхр н н ы й код
                                   о
                е
          Мы познакомились с немедленно вызываемыми функциональными выражения­
       ми (IIFE) в главе 6 и увидели, что они позволяют создавать замкнутые выражения.
       Давайте рассмотрим важный пример (к которому мы вернемся в главе 14) того, как
       IIFE может помочь нам с асинхронным кодом.
          Один из  первых случаев использования IIFE подразумевает создание новых пе­
       ременных в  новых областях видимости, чтобы асинхронный код выполнялся пра­
       вильно. Рассмотрим классический пример таймера, который осуществляет обратный
       отсчет от 5 секунд до О  (команда  "Старт ! " ). В этом коде использована встроенная
       функция setTimeout, которая задерживает выполнение ее первого аргумента (функ­
       ции) на второй аргумент (количество миллисекунд). Например, следующий код вы­
                                   1
       водит строку "Привет ! "   через  , 5 секунды.
       setTimeout ( f unction ( )    {  console . l og ( " Привет ! " ) ;  } ,  1 5 0 0 ) ;

          Т е перь, обладая этим знанием, создадим нашу функцию обратного отсчета.
       var  i ;
       for ( i =5 ;  i>= O ;   i--)  {
                         t
           setTimeout ( f unc i on ( )
               console . l og ( i===O ?  "Старт ! "     i ) ;
              ( 5 -i )  1 0 0 0 ) ;
                   *
           } ,


                      Немедленно вызываемое функциональное выражение и асинхронный код   221
   213   214   215   216   217   218   219   220   221   222   223