function*
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.
La declaración function*
(la palabra clave function
seguida de un asterisco) define una función generadora, que devuelve un objeto Generator
.
También puedes definir funciones generadoras usando el constructor GeneratorFunction
y una function* expression
.
Sintaxis
function* nombre([param[, param[, ... param]]]) { instrucciones }
nombre
-
El nombre de la función.
param
-
El nombre de los argumentos que se le van a pasar a la función. Una función puede tener hasta 255 argumentos.
instrucciones
-
Las 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 objeto iterador para la función en su lugar. Cuando el metodo next()
del iterador es llamado , el cuerpo de la función generadora es ejecutado hasta la primera expresión yield
, la cual especifica el valor que será retornado por el iterador o con, yield*
, delega a otra función generadora. El método next()
retorna un objeto con una propiedad value que contiene el valor bajo el operador yield y una propiedad done 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); // 0
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
console.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); // 10
console.log(gen.next().value); // 11
console.log(gen.next().value); // 12
console.log(gen.next().value); // 13
console.log(gen.next().value); // 20
Especificaciones
Specification |
---|
ECMAScript Language Specification # sec-generator-function-definitions |
Compatibilidad con navegadores
BCD tables only load in the browser
Ver también
function* expression
GeneratorFunction
object- The Iterator protocol
yield
yield*
Function
objectfunction declaration
function expression
Functions 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