ES6 a ajouté des fonctions de flèche de graisse ( =>
), qui ont deux différences majeures par rapport aux fonctions normales:
- syntaxe plus courte (y compris retour implicite si vous utilisez un corps à expression unique)
- hériter
this
de la portée environnante
Ce sont deux fonctionnalités très utiles, mais elles me semblent complètement distinctes dans leur valeur et leur application - parfois je veux l'une, ou l'autre, ou les deux, ou aucune. Il semble étrange que si je veux utiliser une fonction de syntaxe courte, je dois également utiliser le this
comportement -modifier. Et vice versa. Je ne vois pas pourquoi ces deux capacités sont implémentées comme un seul ajout au langage.
Que faire si je veux utiliser une fonction de syntaxe courte pour son retour implicite et sa brièveté (dans un contexte où un full function (..) { return ...}
serait légèrement moins lisible), mais je veux utiliser this
dans ma fonction pour faire référence au contexte appelant? Il n'y a aucun moyen de le faire.
CoffeeScript a deux ->
et =>
fonctions de style, et apparemment ES6 a emprunté le =>
style à partir là - bas. Ma question est donc la suivante: pourquoi ES6 n'a-t-il pas également emprunté le ->
style?
la source
arguments
.this
à la fermeture dans une déclaration de fonction complète. Ce n'est peut-être pas la partie qui vous préoccupe cependant.Réponses:
Voir la proposition d'ajouter des fonctions fléchées: http://wiki.ecmascript.org/doku.php?id=harmony:arrow_function_syntax 1
Ce qu'il dit, c'est:
Vous pouvez également voir une discussion sur une version précédente de la proposition qui avait également la syntaxe ->: https://esdiscuss.org/topic/arrow-function-syntax-simplified
Il semble se résumer à ce qui suit:
->
été jugée rarement utile, et un foot-gun.la source
function()
style de cette reliure était une erreur et une verrue sur la langue. S'ils le pouvaient, ils changeraientfunction()
pour avoir la=>
sémantique, mais ils ne le peuvent pas car cela romprait la compatibilité descendante.function()
pour hériterthis
de la portée environnante comme le=>
fait le cas? Dans ce cas, ne ferait-on pasthis
simplement référence à l'objet global partout? Ça a l'air bizarre. Où avez-vous entendu cela?