En esta página encontré un nuevo tipo de función de JavaScript:
// NOTE: "function*" is not supported yet in Firefox.
// Remove the asterisk in order for this code to work in Firefox 13
function* fibonacci() { // !!! this is the interesting line !!!
let [prev, curr] = [0, 1];
for (;;) {
[prev, curr] = [curr, prev + curr];
yield curr;
}
}
Ya sé qué yield
, let
y [?,?]=[?,?]
hago , pero no tengo idea de lo function*
que debe ser. ¿Qué es?
PD: no te molestes en probar Google, es imposible buscar expresiones con asteriscos ( se usan como marcadores de posición ).
javascript
function
ecmascript-6
string QNA
fuente
fuente
function*
sintaxis es compatible con Firefox desde v26: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… *. Las versiones anteriores usaban una sintaxis diferente.*
fue eliminado del enlace de @Nickolay. Aquí hay un enlace directamente afunction*
MDN . Efectivamente, soporte "básico" desde v26 .Respuestas:
Es una función de generador .
Nota histórica:
Es una sintaxis propuesta para
EcmaScript.next
.Dave Herman de Mozilla dio una charla sobre EcmaScript.next . A las 30:15 habla de generadores.
Anteriormente, explica cómo Mozilla está implementando experimentalmente los cambios de idioma propuestos para ayudar a dirigir el comité. Dave trabaja en estrecha colaboración con Brendan Eich, el CTO de Mozilla (creo), y el diseñador original de JavaScript.
Puede encontrar más detalles en el wiki del grupo de trabajo EcmaScript: http://wiki.ecmascript.org/doku.php?id=harmony:generators
El grupo de trabajo (TC-39) tiene un acuerdo general de que EcmaScript.next debería tener algún tipo de propuesta de iterador generador, pero esto no es definitivo.
No debe confiar en que aparezca sin cambios en la próxima versión del idioma, e incluso si no cambia, probablemente no se mostrará ampliamente en otros navegadores por un tiempo.
fuente
for(;;)
)? ¿Por qué usarlo en este contexto?for(;;)
es lo mismo quewhile (true)
. Se usa en este contexto ya que la secuencia de Fibonacci es una secuencia ilimitada.Es una función generadora , y así lo dijo en la página que cita, en el comentario que reemplazó con "esta es la línea interesante" ...
Básicamente es una forma de especificar secuencias mediante programación para que puedan pasarse y acceder a los elementos por índice sin tener que calcular la secuencia completa (posiblemente de tamaño infinito) de antemano.
fuente
Los
function*
de tipo parece que actúa como un generador de función para los procesos que se pueden repetir. C # tiene una característica como esta usando "rendimiento de rendimiento", ver 1 y ver 2Esencialmente, esto devuelve cada valor uno por uno a lo que sea que esté iterando esta función, por lo que su caso de uso lo muestra en un bucle de estilo foreach.
fuente