From 074785cea106179cb3305637055ab0a009ca74f2 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:42:52 -0500 Subject: initial commit --- .../reference/operators/yield/index.html | 94 ++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 files/ru/web/javascript/reference/operators/yield/index.html (limited to 'files/ru/web/javascript/reference/operators/yield/index.html') diff --git a/files/ru/web/javascript/reference/operators/yield/index.html b/files/ru/web/javascript/reference/operators/yield/index.html new file mode 100644 index 0000000000..04552374c8 --- /dev/null +++ b/files/ru/web/javascript/reference/operators/yield/index.html @@ -0,0 +1,94 @@ +--- +title: yield +slug: Web/JavaScript/Reference/Operators/yield +tags: + - ECMAScript6 + - JavaScript + - Генераторы + - Итераторы + - Оператор + - Экспериментальный +translation_of: Web/JavaScript/Reference/Operators/yield +--- +
{{jsSidebar("Operators")}}
+ +

Ключевое слово 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 }
+
+ +

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

+ + + + + + + + + + + + + + + + + + + + + +
СпецификацияСтатусКомментарий
{{SpecName('ES2015', '#prod-YieldExpression', 'Yield')}}{{Spec2('ES2015')}}Изначальное определение.
{{SpecName('ESDraft', '#prod-YieldExpression', 'Yield')}}{{Spec2('ESDraft')}}
+ +

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

+ +

{{Compat("javascript.operators.yield")}}

+ +

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

+ + + +
+
+
-- cgit v1.2.3-54-g00ecf