yield

Вы читаете английскую версию этой статьи, так как пока нет перевода на данный язык. Помогите нам перевести эту статью!

Ключевое слово yield используется для остановки и возобновления функций-генераторов (function* или legacy generator function).

Синтаксис

 [rv] = yield [[выражение]];
выражение
Возвращаемое выражение. Если не указано, то возвращается значение undefined.
rv
Возвращает необязательное значение, которое передаётся в next() генератора, чтобы возобновить его выполнение.

Описание

Ключевое слово 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 2015 (6th Edition, ECMA-262)
Определение 'Yield' в этой спецификации.
Стандарт Изначальное определение.
ECMAScript Latest Draft (ECMA-262)
Определение 'Yield' в этой спецификации.
Черновик

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

Update compatibility data on GitHub
КомпьютерыМобильныеServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome для AndroidFirefox для AndroidOpera для AndroidSafari on iOSSamsung InternetNode.js
yieldChrome Полная поддержка 39Edge Полная поддержка 12Firefox Полная поддержка 26
Замечания
Полная поддержка 26
Замечания
Замечания Starting with Firefox 33, the parsing of the yield expression has been updated to conform with the ES2015 specification.
Замечания Starting with Firefox 29, an IteratorResult object returned for completed generator function.
IE Нет поддержки НетOpera Полная поддержка ДаSafari Полная поддержка 10WebView Android Полная поддержка 39Chrome Android Полная поддержка 39Firefox Android Полная поддержка 26
Замечания
Полная поддержка 26
Замечания
Замечания Starting with Firefox 33, the parsing of the yield expression has been updated to conform with the ES2015 specification.
Замечания Starting with Firefox 29, an IteratorResult object returned for completed generator function.
Opera Android Полная поддержка ДаSafari iOS Полная поддержка 10Samsung Internet Android Полная поддержка 4.0nodejs Полная поддержка 4.0.0
Полная поддержка 4.0.0
Полная поддержка 0.12
Отключено
Отключено From version 0.12: this feature is behind the --harmony runtime flag.

Легенда

Полная поддержка  
Полная поддержка
Нет поддержки  
Нет поддержки
Смотрите замечания реализации.
Смотрите замечания реализации.
Пользователь должен сам включить эту возможность.
Пользователь должен сам включить эту возможность.

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