GeneratorFunction

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2016.

En JavaScript, chaque fonction génératrice est en réalité un objet GeneratorFunction. Il n'existe pas d'objet global avec le nom GeneratorFunction, mais il est possible de créer un constructeur GeneratorFunction() avec le code suivant :

js
const GeneratorFunction = Object.getPrototypeOf(function* () {}).constructor;

Description

Les fonctions génératrices créées avec un constructeur sont analysées à la création de la fonction. Il s'agit là d'une méthode moins efficace qu'une déclaration de fonction génératrice avec une expression function* qu'on appelle dans le code. En effet, de telles fonctions sont alors analysées avec le reste du code.

Tous les arguments passés à la fonction sont traités comme les noms des identifiants des paramètres de la fonction à créer, dans l'ordre dans lequel ils sont passés.

Note : Les fonctions génératrices créées avec un constructeur ne créent pas de fermetures avec leur contexte de création. Elles sont toujours créées dans la portée globale.

Lors de leur exécution, elles ne pourront accéder qu'à leurs variables locales et aux variables globales, pas à celles de la portée dans laquelle le constructeur a été appelé.

Il y a donc une différence de comportement par rapport à une expression eval() qui contiendrait une expression de fonction génératrice.

Invoquer un constructeur de fonction génératrice comme une fonction (sans utiliser new) aura le même effet que d'appeler le constructeur.

Exemples

Créer un générateur en utilisant le constructeur GeneratorFunction()

js
const GeneratorFunction = Object.getPrototypeOf(function* () {}).constructor;
const g = new GeneratorFunction("a", "yield a * 2");
const iterator = g(10);
console.log(iterator.next().value); // 20

Spécifications

Specification
ECMAScript® 2025 Language Specification
# sec-generatorfunction-objects

Compatibilité des navigateurs

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
GeneratorFunction
GeneratorFunction() constructor

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

Voir aussi