ES6 agregó funciones de flecha de grasa ( =>
), que tienen dos diferencias principales con respecto a las funciones normales:
- sintaxis más corta (incluido el retorno implícito si usa un cuerpo de expresión única)
- heredar
this
del alcance circundante
Ambas son características muy útiles, pero me parecen completamente separadas en su valor y aplicación; a veces quiero una, o la otra, o ambas, o ninguna. Parece extraño que si quiero usar una función de sintaxis corta, también tengo que usar el this
comportamiento de modificación. Y viceversa. No veo por qué estas dos capacidades se implementan como una sola adición al lenguaje.
¿Qué sucede si quiero usar una función de sintaxis corta para su retorno implícito y brevedad (en algún contexto donde un completo function (..) { return ...}
sería un poco menos legible), pero quiero usar this
en mi función para referirme al contexto de llamada? No hay forma de hacer esto.
CoffeeScript tiene ambas funciones ->
y =>
estilo, y aparentemente ES6 tomó prestado el =>
estilo a partir de ahí. Entonces mi pregunta es, ¿por qué ES6 tampoco tomó prestado el ->
estilo?
fuente
arguments
.this
al cierre en una declaración de función completa. Sin embargo, esta podría no ser la parte que le preocupa.Respuestas:
Consulte la propuesta para agregar funciones de flecha: http://wiki.ecmascript.org/doku.php?id=harmony:arrow_function_syntax 1
Lo que dice es:
También puede ver un análisis de una versión anterior de la propuesta que también tenía la sintaxis ->: https://esdiscuss.org/topic/arrow-function-syntax-simplified
Parece que se reduce a lo siguiente:
->
rara vez se consideró útil, y un pistolero.fuente
function()
estilo de este enlace fue un error y es una verruga en el lenguaje. Si pudieran, cambiaríanfunction()
para tener=>
semántica, pero no pueden porque eso rompería la compatibilidad con versiones anteriores.function()
para heredarthis
del alcance circundante como lo=>
hace? En ese caso, ¿no sethis
referiría simplemente al objeto global en todas partes? Suena raro. ¿De dónde has oído eso?