w3schools ventajas react functions example ecmascript javascript function ecmascript-6

ventajas - map javascript



¿Qué es la "función*" en JavaScript? (3)

En this 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é lo que hacen el yield , let y [?,?]=[?,?] , Pero no tengo idea de lo que la function* debe ser. ¿Qué es?

PS no se molesta en probar Google, es impossible buscar expresiones con asteriscos ( se usan como marcadores de posición ).


El tipo de function* parece que actúa como una función generadora para procesos que pueden ser iterados. C # tiene una característica como esta que usa "rendimiento" ver 1 y ver 2

Esencialmente, esto devuelve cada valor uno por uno a lo que sea que esté repitiendo esta función, por lo que su caso de uso lo muestra en un bucle de estilo foreach.


Es una función de generador , 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 transmitirse y se pueda acceder a los elementos mediante un índice sin tener que calcular la secuencia completa (posiblemente de tamaño infinito) de antemano.


Es una función de Generator .

Los generadores son funciones que se pueden salir y volver a ingresar posteriormente. Su contexto (enlaces variables) se guardará a través de re-entradas.

Llamar a una función de generador no ejecuta su cuerpo inmediatamente; en su lugar se devuelve un objeto iterador para la función. Cuando se llama al método next() del iterador, el cuerpo de la función del generador se ejecuta hasta que la primera expresión de yield , que especifica el valor a devolver desde el iterador o, con el yield* , delega a otra función del 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, CTO de Mozilla (creo), y el diseñador de JavaScript original.

Puede encontrar más detalles en la wiki del grupo de trabajo de 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 generador de iteradores, 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, es probable que no se muestre ampliamente en otros navegadores durante un tiempo.

Visión general

Corutines de primera clase, representados como objetos que encapsulan contextos de ejecución suspendidos (es decir, activaciones de funciones). Arte anterior: Python, Icono, Lua, Esquema, Smalltalk.

Ejemplos

La secuencia "infinita" de los números de Fibonacci (a pesar del comportamiento en torno a 2 53 ):

function* fibonacci() { let [prev, curr] = [0, 1]; for (;;) { [prev, curr] = [curr, prev + curr]; yield curr; } }

Los generadores pueden ser iterados en bucles:

for (n of fibonacci()) { // truncate the sequence at 1000 if (n > 1000) break; print(n); }

Los generadores son iteradores:

let seq = fibonacci(); print(seq.next()); // 1 print(seq.next()); // 2 print(seq.next()); // 3 print(seq.next()); // 5 print(seq.next()); // 8