The Wayback Machine - https://web.archive.org/web/20150905203138/https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Statements/function%2A

function*

by 1 contributor:

This article is in need of a technical review.

This article is in need of an editorial review.

Это экспериментальная технология, часть предложения Harmony (ECMAScript 6).
Поскольку спецификация этой технологии ещё не стабилизировалась, проверьте таблицу совместимости её использования в различных браузерах. Также обратите внимание, что синтаксис и поведение экспериментальной технологии могут быть изменены в будущих версиях браузеров в соответствии с изменениями в спецификации.

Сводка

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

Синтаксис

function* gen(i){
  while(true){
    yield i++;
    yield* anotherGenerator(i);
  }
}

Описание

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

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

Примеры

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

function* idMaker(){
    var index = 0;
    while(true)
        yield index++;
}

var gen = idMaker();

console.log(gen.next().value); // 0
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
// ...

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

Спецификация Статус Комментарий
Предложение Harmony Черновик Начало работы над стандартом.
ECMAScript 6 (ECMA-262)
Определение 'Генераторы' в этой спецификации.
Кандидат в рекомендации Изначальное определение в стандарте ECMA.

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

Возможность Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Базовая поддержка 39 26.0 (26.0) Нет 26 Нет
Возможность Android Firefox Mobile (Gecko) IE Phone Opera Mobile Safari Mobile
Базовая поддержка yes (when?) 27.0 (27.0) Нет Нет Нет

Генераторы и итераторы до версии Firefox 26

В старых версиях Firefox была реализована иная версия генераторов. В ней генераторы определялись обычным ключевым словом function (без звёздочки) и имели некоторые другие отличия.

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

Метки документа и участники

Contributors to this page: dtretyakov
Обновлялась последний раз: dtretyakov,
Скрыть боковую панель
HTTPS · web.archive.org
← Home