O ES6 adicionou funções de seta de gordura ( =>
), que têm duas grandes diferenças em relação às funções normais:
- sintaxe mais curta (incluindo retorno implícito se você usar um corpo de expressão única)
- herdar
this
do escopo circundante
Esses são recursos muito úteis, mas me parecem completamente separados em seu valor e aplicação - às vezes eu quero um, ou outro, ou ambos, ou nenhum. Parece estranho que se eu quiser usar uma função de curto sintaxe, eu tenho de usar também o this
comportamento -modifying. E vice versa. Não vejo por que esses dois recursos são implementados como uma única adição ao idioma.
E se eu quiser usar uma função de sintaxe curta para seu retorno e brevidade implícitos (em algum contexto em que um total function (..) { return ...}
seria um pouco menos legível), mas eu quero usar this
em minha função para me referir ao contexto de chamada? Não há como fazer isso.
O CoffeeScript possui funções de estilo ->
e =>
, aparentemente, o ES6 pegou emprestado o =>
estilo a partir daí. Então, minha pergunta é: por que o ES6 também não emprestou o ->
estilo?
fonte
arguments
.this
ao fechamento em uma declaração de função completa. Esta pode não ser a parte com a qual você está preocupado.Respostas:
Veja a proposta de adicionar funções de seta: http://wiki.ecmascript.org/doku.php?id=harmony:arrow_function_syntax 1
O que diz é:
Você também pode ver algumas discussões de uma versão anterior da proposta que também possuía a sintaxe ->: https://esdiscuss.org/topic/arrow-function-syntax-simplified
Parece que se resume ao seguinte:
->
foi considerada raramente útil, e uma metralhadora.fonte
function()
estilo dessa ligação foi um erro e é uma verruga no idioma. Se pudessem, mudariamfunction()
para ter=>
semântica, mas não podem, porque isso quebraria a compatibilidade com versões anteriores.function()
para herdarthis
do escopo circundante, como=>
faz? Nesse caso, não sethis
referiria apenas ao objeto global em qualquer lugar? Soa estranho. onde você ouviu isso?