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

В этом примере показано, что генераторы очень мощны; они позволяют вызыва­
       ющей стороне контролировать выполнение функций. Кроме того, поскольку вызы­
       вающая сторона может передать информацию в генератор, он может даже изменить
       свое поведение на основании переданной информации.

                  Вы  не  можете  создать  генератор,  используя  стрелочную  нотацию;
                  для этого следует использовать ключевое слово functio * .
                                                                    n


       Генератор ы   и оператор  return

          Оператор yield сам по себе не завершает генератор, даже если это его последний
       оператор. Вызов  оператора return в любом месте генератора приводит к присвое­
       нию значения  r ue свойству done. При этом не имеет значения, что вы возвращаете,
                    t
       как показано ниже.

       function*  аЬс  )
                    (
           yield  ' а  ' ;
           yield  ' Ь  ' ;
           return  ' с  ' ;


       const  it   =  count ( ) ;
                                  ,
       it  n ext  ) ;   1 1    {  val u e :    'а '  done:  fa lse  }
              (
         .
                                  ,
       i t . n ext ( ) ;   11  {  val u e :    'Ь '  done :   false  }
       i t . n ext ( ) ;   1 1    value:  ' с , ,   done :   true  }
          Хотя это и вполне корректное поведение генератора, имейте в виду, что при ис­
       пользовании генераторов не всегда обращают внимание на свойство value, когда
                                                                        .
       done  - t r ue. Например, если мы будем использовать это в  цикле  for  . .   of, "с"  не
       будет выведено вообще.

       11  выведет  "а "  и  "Ь",  но  не  "с "
       for ( l et  1  of  аЬ ( ) )
                      с
                     g
           console . l o ( l ) ;

                  Я  не  рекомендую  использовать  оператор  return для  возвращения
                  важного значения из генератора. Для этого лучше использовать опе­
                  ратор yield; а оператор return лучше использовать только для экс­
                  тренной  остановки  генератора.  Поэтому я  рекомендую  вообще  не
                  указывать значений в операторе return генератора.







       212      Глава 12. Итераторы и генераторы
   205   206   207   208   209   210   211   212   213   214   215