¿Puedo usar la sintaxis de la función de flecha de ES6 con generadores? (notación de flecha)

Resuelto Ashley Coolman asked hace 9 años • 8 respuestas

Es decir, ¿cómo expreso

function *(next) {}

con sintaxis de flecha? Probé todas las combinaciones que se me ocurrieron y no encuentro ninguna documentación al respecto.

(Actualmente estoy usando Node.js v0.11.14).

Ashley Coolman avatar Dec 27 '14 02:12 Ashley Coolman
Aceptado

¿Puedo usar la sintaxis de la función de flecha de ES6 con generadores?

No puedes. Lo siento.

Según MDN

La function*declaración ( functionpalabra clave seguida de un asterisco) define una función generadora.

De un documento de especificaciones (énfasis mío):

La sintaxis de la función se amplía para agregar un *token opcional:

FunctionDeclaration: "function" "*"? Identifier "(" FormalParameterList? ")" 
  "{" FunctionBody "}"
 avatar Dec 26 '2014 20:12

La diferencia entre funciones en línea y funciones de flecha

En primer lugar, las funciones Arrow () => {} no están diseñadas para reemplazar las funciones Inline function(){}y son diferentes. Las funciones en línea son simplemente funciones, por lo que la pregunta es cuál es la diferencia entre las funciones de flecha y las funciones en línea.

Una expresión de función de flecha (también conocida como función de flecha) tiene una sintaxis más corta en comparación con las expresiones de función y no vincula sus propias expresiones this( arguments,, supero new.target). Las funciones de flecha son siempre anónimas.

Algunos detalles más rápidos aquí


Por qué la función Arrow no se puede utilizar como generador

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions

Uso de la palabra clave de rendimiento

La palabra clave rendimiento no se puede utilizar en el cuerpo de una función de flecha (excepto cuando se permita dentro de funciones anidadas dentro de ella). Como consecuencia, las funciones de flecha no se pueden utilizar como generadores.

Tenga en cuenta que los generadores sin ellos yieldno tienen sentido.


Por qué la función Arrow no puede utilizar el rendimiento

http://tc39wiki.calculist.org/es6/arrow-functions/

Las funciones de flecha se vinculan thisléxicamente, se vinculan returnen el cuerpo del bloquebreak para que regrese de la función de flecha inmediatamente circundante y excluyen y continuehacen referencia a declaraciones fuera de la función de flecha inmediatamente circundante.

La expresión principal del Identificadorarguments no se puede utilizar en el cuerpo de una función de flecha (ya sea en forma de expresión o de bloque).

Asimismo, yieldno se puede utilizar en el cuerpo de una función de flecha. Las flechas no pueden ser generadoras y no queremos continuaciones profundas.

El rendimiento en una función de flecha arrojará un error semántico: http://www.ecma-international.org/

Al final, la razón está en la profunda complejidad en la implementación de ECMA6. C# tampoco permite esto por razones similares .

CoderPi avatar Dec 05 '2015 16:12 CoderPi