Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Справочник JavaScript

function*

Функция-генератор: выдаёт значения по одному через yield.

Доступно с: ES2015

Синтаксис

function* name() { yield value; }

Примеры

Генератор выдаёт значения по требованию:

function* count() {
  yield 1;
  yield 2;
  yield 3;
}
 
console.log([...count()].join(', '));

Результат:

1, 2, 3

Бесконечная последовательность — берём только нужное:

function* ids() {
  let id = 1;
  while (true) yield id++;
}
 
const generator = ids();
 
console.log(generator.next().value);
console.log(generator.next().value);
console.log(generator.next().value);

Результат:

1
2
3

Методы итераторов:

function* naturals() {
  let n = 1;
  while (true) yield n++;
}
 
console.log(naturals().filter((n) => n % 2 === 0).map((n) => n * 10).take(3).toArray().join(', '));

Результат:

20, 40, 60

Примечания

Код генератора выполняется по частям: каждый вызов next() доходит до следующего yield и останавливается. Поэтому бесконечный цикл внутри генератора не зависает программу.

См. также

  • Symbol.iterator — Особый ключ, который делает объект перебираемым в for...of и spread.
  • for...of — Перебирает значения массива, строки, Map, Set и других перебираемых объектов.
  • for await...of — Перебирает асинхронные источники данных, дожидаясь каждого элемента.

В учебнике

  • Итераторы и генераторы — Как работает for...of в JavaScript: перебираемые объекты, итераторы и метод next, функции-генераторы с yield и свой перебираемый объект.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.