Вебсправочник
Справочник JavaScript

Генератор function*: последовательность значений по запросу

Генератор создаёт последовательность, вычисление которой приостанавливается на yield. Значения можно получать постепенно, не собирая весь результат в массив заранее.

Назначение

Генератор создаёт последовательность, вычисление которой приостанавливается на yield. Значения можно получать постепенно, не собирая весь результат в массив заранее.

Как это работает

Вызов функции со звёздочкой возвращает объект генератора. Next продолжает выполнение до следующего yield или завершения. Возвращаемый объект содержит value и done; for…of автоматически использует этот протокол.

Пример

function* steps() {
  yield "Разметка";
  yield "Стили";
  return "Готово";
}
const iterator = steps();
console.assert(iterator.next().value === "Разметка");
console.assert(iterator.next().done === false);
const last = iterator.next();
console.assert(last.done && last.value === "Готово");
console.assert([...steps()].join("|") === "Разметка|Стили");
console.log(last);

Что должно получиться

Два yield дают элементы последовательности. Финальный return завершает генератор и доступен через next, но не добавляется как обычный элемент при разворачивании через spread.

Граница применения и частая ошибка

Исчерпанный экземпляр генератора не начинает работу заново: нужен новый вызов функции. Генератор не делает тяжёлое вычисление неблокирующим автоматически и не создаёт отдельный поток. Бесконечную последовательность нельзя без ограничения разворачивать в массив.

Самостоятельная проверка

Создайте генератор номеров от одного до пяти. Прервите обход после второго и сравните с новым экземпляром. Отдельно запишите результаты next после завершения, чтобы увидеть значение done.

Пример JavaScript проверяйте в собственном учебном файле или консоли своего проекта. Встроенная песочница справочника JavaScript не выполняет. Успешное выполнение в одной среде не гарантирует поддержку метода во всех браузерах.

Самостоятельный учебный материал. Техническая документация: первоисточник по теме ↗. Если результат отличается, проверьте код и версию браузера.