yield

Сводка

Ключевое слово yield используется для остановки и возобновления функции-генератора.

Синтаксис

 yield [[выражение]];
выражение
Возвращаемое выражение. Если не указано, то возвращается значение undefined.

Описание

Ключевое слово yield вызывает остановку функции-генератора и возвращает текущее значение выражения, указанного после ключевого слова yield. Его можно рассматривать как аналог ключевого слова return в функции-генераторе.

На самом деле ключевое слово yield  возвращает объект с двумя параметрами, value и done. При этом, value является результатом вычисления выражения после yield, а done указывает верно ли была выполнена функция-генератор.

Во время остановки на операторе yield, выполнение кода в генераторе не возобновится, пока не будет вызван метод next() функции-генератора. Это предоставляет непосредственный контроль за выполнением генератора и возвратом его значений.

Примеры

Следующий фрагмент кода содержит определение функции-генератора и вспомогательной функции:

function* foo(){
  var index = 0;
  while(index <= 2) // при достижении 2, done в yield станет true, а value undefined;
    yield index++;
}

После того как тело функции-генератора определено, оно может использоваться для получения итератора:

var iterator = foo();
console.log(iterator.next()); // { value:0, done:false }
console.log(iterator.next()); // { value:1, done:false }
console.log(iterator.next()); // { value:2, done:false }
console.log(iterator.next()); // { value:undefined, done:true }

Необходимы дополнительные примеры.

Спецификации

Спецификация Статус Комментарий
ECMAScript 6 (ECMA-262)
Определение 'Yield' в этой спецификации.
Кандидат в рекомендации Изначальное определение.

Совместимость с браузерами

Возможность Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Базовая поддержка ? ? ? ? ?
Возможность Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Базовая поддержка ? ? ? ? ?

Смотрите также

Метки документа и участники

 Внесли вклад в эту страницу: dtretyakov
 Обновлялась последний раз: dtretyakov,