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

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help! (en-US)
Caracter铆stica Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Soporte b谩sico 39.0 26.0 (26.0) Sin soporte 26 Sin soporte
yield* (Yes) 27.0 (27.0) Sin soporte 26 Sin soporte
IteratorResult object instead of throwing (Yes) 29.0 (29.0) Sin soporte (Yes) Sin soporte
Caracter铆stica Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Soporte b谩sico (Yes) 39.0 26.0 (26.0) Sin soporte Sin soporte Sin soporte
yield* (Yes) (Yes) 27.0 (27.0) Sin soporte Sin soporte Sin soporte
IteratorResult object instead of throwing ? (Yes) 29.0 (29.0) Sin soporte Sin soporte Sin soporte

Notas espec铆ficas de Firefox

Generadores e iteradores en versiones de Firefox anteriores a 26

Las versiones anteriores de FireFox implementan as铆 mismo una versi贸n anterior de la propuesta de generadores. En la versi贸n anterior, los generadores eran definidos utilizando la declaraci贸n function de una manera regular (Sin asterisco).  V茅ase Legacy generator function para mayor informaci贸n.

IteratorResult object returned instead of throwing

Starting with Gecko 29 (Firefox 29 / Thunderbird 29 / SeaMonkey 2.26), the completed generator function no longer throws a TypeError "generator has already finished". Instead, it returns an IteratorResult object like { value: undefined, done: true } (error 958951).

Ver tambi茅n