GeneratorFunction
BaselineWidely 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 objetGeneratorFunction
. Il n'existe pas d'objet global avec le nomGeneratorFunction
, mais il est possible de créer un constructeurGeneratorFunction()
avec le code suivant :
const GeneratorFunction = Object.getPrototypeOf(function* () {}).constructor;
Description
Lesfonctions 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 avecune expressionfunction*
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 :Lesfonctions 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 expressioneval()
qui contiendrait une expression de fonction génératrice.
Invoquer un constructeur de fonction génératrice comme une fonction (sans utilisernew
) aura le même effet que d'appeler le constructeur.
Exemples
Créer un générateur en utilisant le constructeurGeneratorFunction()
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® 2026 Language Specification # sec-generatorfunction-objects |