Esta página ha sido traducida del inglés por la comunidad.Aprende más y únete a la comunidad de MDN Web Docs.
function*
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since septiembre de 2016.
La declaraciónfunction* (la palabra clavefunction seguida de un asterisco) define unafunción generadora, que devuelve un objetoGenerator.
También puedes definir funciones generadoras usando el constructorGeneratorFunction y unafunction* expression.
In this article
Sintaxis
function* nombre([param[, param[, ... param]]]) { instrucciones}nombreEl nombre de la función.
paramEl nombre de los argumentos que se le van a pasar a la función. Una función puede tener hasta 255 argumentos.
instruccionesLas instrucciones que componen el cuerpo de la función.
Descripción
Los generadores son funciones de las que se puede salir y volver a entrar. Su contexto (asociación de variables) será conservado entre las reentradas.
La llamada a una función generadora no ejecuta su cuerpo inmediatamente; se devuelve un objetoiterador para la función en su lugar. Cuando el metodonext() del iterador es llamado , el cuerpo de la función generadora es ejecutado hasta la primera expresiónyield, la cual especifica el valor que será retornado por el iterador o con,yield*, delega a otra función generadora. El métodonext() retorna un objeto con una propiedadvalue que contiene el valor bajo el operador yield y una propiedaddone que indica, con un booleano, si la función generadora ha hecho yield al último valor.
Ejemplos
>Ejemplo simple
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// ...Ejemplo con yield*
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); // 20Especificaciones
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-generator-function-definitions> |
Compatibilidad con navegadores
Ver también
function* expressionGeneratorFunctionobject- The Iterator protocol
yieldyield*Functionobjectfunction declarationfunction expressionFunctions and function scope- Other web resources:
- Regenerator an ES2015 generator compiler to ES5
- Forbes Lindesay: Promises and Generators: control flow utopia — JSConf EU 2013
- Hemanth.HM: The New gen of *gen(){}
- Task.js