javascript - functions - ¿Qué significa la estrella en la definición de función como "función*()"?
javascript addeventlistener arrow function (2)
Esta pregunta ya tiene una respuesta aquí:
- ¿Qué es "función *" en JavaScript? 3 respuestas
function*() { .... }
Acabo de encontrar esa forma de definición en algún otro código js, ¿qué significa realmente la estrella? Gracias
A partir de ES6, definirá una función de generador . (Ese enlace está en la página wiki de "armonía" anterior, que puede que ya no esté actualizada ya que se ha plegado en los borradores de especificaciones más recientes , actualmente es la Sección 14.4).
Aquí hay un ejemplo de un generador:
function* fibonacci() {
let [prev, curr] = [0, 1];
for (;;) {
[prev, curr] = [curr, prev + curr];
yield curr;
}
}
Varias maneras de usar:
Con un bucle for-of
(otra cosa de ES6, en la Sección 13.6.4):
for (n of fibonacci()) {
// truncate the sequence at 1000
if (n > 1000)
break;
print(n);
}
Como un iterador:
let seq = fibonacci();
print(seq.next()); // 1
print(seq.next()); // 2
print(seq.next()); // 3
print(seq.next()); // 5
print(seq.next()); // 8
De aquí
Una función con un * token se conoce como función de generador. Los siguientes dos operadores unarios solo están permitidos en el cuerpo inmediato de una función de generador (es decir, en el cuerpo pero no anidados dentro de otra función):
AssignmentExpression:
...
YieldExpression
YieldExpression:
"yield" ("*"? AssignmentExpression)?
Se produce un error temprano si se produce una expresión de rendimiento o rendimiento * en una función no generadora.
También verifique los Generadores MDN y What Is This Thing.