function*

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

Especificaciones Status Comentarios
ECMAScript 2015 (6th Edition, ECMA-262)
La definición de 'function*' en esta especificación.
Standard Initial definition.

Compatibilidad con navegadores

BCD tables only load in the browser

Ver también