Movatterモバイル変換


[0]ホーム

URL:


  1. Веб-технологии для разработчиков
  2. JavaScript
  3. Справочник по JavaScript
  4. Инструкции и объявления
  5. function*

This page was translated from English by the community.Learn more and join the MDN Web Docs community.

View in EnglishAlways switch to English

function*

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨сентябрь 2016 г.⁩.

Сводка

function* (ключевое словоfunction со звёздочкой) определяетфункцию-генератор.

Синтаксис

function* name([param[, param[, ... param]]]) { statements }
name

Имя функции.

param

Именованные аргументы функции (параметры). Функция-генератор может иметь 255 аргументов.

statements

Инструкции составляющие тело функции.

Описание

Генераторы являются функциями с возможностью выхода и последующего входа. Их контекст исполнения (значения переменных) сохраняется при последующих входах.

Когда вызывается функция-генератор, её тело исполняется не сразу; вместо этого возвращается объект-итератор. При вызове методаnext() итератора тело функции-генератора исполняется до первого встреченного оператораyield, который определяет возвращаемое значение или делегирует дальнейшее выполнение другому генератору при помощиyield* anotherGenerator(). Методnext() возвращает объект со свойствомvalue, содержащим отданное значение, и свойствомdone, которое указывает, что генератор уже отдал своё последнее значение. Вызов методаnext() с аргументом прекращает выполнение функции-генератора, и заменяет инструкцию yield на которой было приостановлено выполнение на аргумент переданный вnext().

Примеры

Простой пример

js
function* idMaker() {  var index = 0;  while (index < 3) yield index++;}var gen = idMaker();console.log(gen.next().value); // 0console.log(gen.next().value); // 1console.log(gen.next().value); // 2console.log(gen.next().value); // undefined// ...

Пример с yield*

js
function* anotherGenerator(i) {  yield i + 1;  yield i + 2;  yield i + 3;}function* generator(i) {  yield i;  yield* anotherGenerator(i);  yield i + 10;}var gen = generator(10);console.log(gen.next().value); // 10console.log(gen.next().value); // 11console.log(gen.next().value); // 12console.log(gen.next().value); // 13console.log(gen.next().value); // 20

Передача аргументов в генератор

js
function* logGenerator() {  console.log(yield);  console.log(yield);  console.log(yield);}var gen = logGenerator();// первый вызов next выполняется от начала функции// и до первого оператора yieldgen.next();gen.next("pretzel"); // pretzelgen.next("california"); // californiagen.next("mayonnaise"); // mayonnaise

Инструкция return в генераторе

js
function* yieldAndReturn() {  yield "Y";  return "R";  yield "unreachable";}var gen = yieldAndReturn();console.log(gen.next()); // { value: "Y", done: false }console.log(gen.next()); // { value: "R", done: true }console.log(gen.next()); // { value: undefined, done: true }

Генераторы не могут быть инстанцированы (not constructable)

js
function* f() {}var obj = new f(); // throws "TypeError: f is not a constructor"

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

Specification
ECMAScript® 2026 Language Specification
# sec-generator-function-definitions

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

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

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp