--- title: yield slug: Web/JavaScript/Reference/Operators/yield tags: - ECMAScript6 - JavaScript - Генераторы - Итераторы - Оператор - Экспериментальный translation_of: Web/JavaScript/Reference/Operators/yield ---
Ключевое слово yield
используется для остановки и возобновления функций-генераторов ({{jsxref("Statements/function*", "function*")}} или legacy generator function).
{{EmbedInteractiveExample("pages/js/expressions-yield.html")}}
[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 }
{{Compat}}