--- title: yield slug: Web/JavaScript/Reference/Operators/yield tags: - ECMAScript 2015 - JavaScript - Ітератор - Оператор - генератори translation_of: Web/JavaScript/Reference/Operators/yield ---
{{jsSidebar("Operators")}}

Ключове слово yield використовується для призупинення та відновлення виконання функції-генератора ({{jsxref("Statements/function*", "function*")}} або застарілої функції-генератора).

{{EmbedInteractiveExample("pages/js/expressions-yield.html")}}

Синтаксис

[rv] = yield [expression];
expression
Визначає значення, яке буде повернене функцією-генератором згідно протоколу ітератора. Якщо пропущене, повертається undefined.
rv

Отримує необов'язкове значення, передане у метод генератора next() для відновлення виконання.

Опис

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

Оператор yield може викликатись тільки безпосередньо з функції-генератора, яка його містить. Його не можна викликати з вкладених функцій або зворотних викликів.

Ключове слово yield здійснює виклик метода генератора next(), повертаючи об'єкт IteratorResult з двома властивостями, value та done. Властивість value є результатом обчислення виразу yield, а done дорівнює false, вказуючи, що функція-генератор ще не завершена.

Зупинившись на виразі yield, виконання коду генератора залишається на паузі до виклику методу генератора next(). Кожний раз, коли викликається метод генератора next(), генератор відновлює виконання та виконується, поки не досягає чогось з наступного:

Якщо у метод генератора next() було передано необов'язкове значення, воно стає значенням, що повертається поточною операцією генератора yield.

Маючи фрагменти коду, що виконуються генератором, оператори yield та здатність вказувати нове початкове значення, передаючи його у {{jsxref("Generator.prototype.next()")}}, генератори надають неймовірну потужність та контроль.

Приклади

Наступний код є оголошенням прикладу функції-генератора.

function* countAppleSales () {
  var saleList = [3, 7, 5];
  for (var i = 0; i < saleList.length; i++) {
    yield saleList[i];
  }
}

Як тільки функція-генератор визначена, її можна використовувати, створивши ітератор, як показано нижче.

var appleStore = countAppleSales(); // Generator { }
console.log(appleStore.next()); // { value: 3, done: false }
console.log(appleStore.next()); // { value: 7, done: false }
console.log(appleStore.next()); // { value: 5, done: false }
console.log(appleStore.next()); // { value: undefined, done: true }

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

Специфікація Статус Коментар
{{SpecName('ES2015', '#prod-YieldExpression', 'Yield')}} {{Spec2('ES2015')}} Початкове визначення.
{{SpecName('ESDraft', '#prod-YieldExpression', 'Yield')}} {{Spec2('ESDraft')}}

Сумісність з веб-переглядачами

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

Примітки щодо Firefox

Див. також