2017-09-20 2 views
1

Y a-t-il une différence entre renvoyer une valeur dans une fonction de flèche, ajouter un corps et taper un retour? Pour autant que je sache, ce sont les mêmes.Corps de la fonction fléchée par rapport à la valeur renvoyée.() => {return value;} vs.() => valeur;

Voici une session:

let a =() => 1; 
a() 
1 
let b =() => { return 1; } 
b() 
1 
a 
() => 1 
b 
() => { return 1; } 

Y at-il la situation lorsque ceux-ci sont différents?

+7

Oui, ils sont identiques. –

+1

avec {} vous pouvez faire le corps multiline, aucune autre différence – juvian

+0

Connexe: [fonction de flèche sans accolades] (https://stackoverflow.com/questions/39629962/fonction-le-fonctionnement-avec-curly-braces), [Supports bouclés dans les fonctions de flèche] (https://stackoverflow.com/questions/35440265/curly-brackets-in-arrow-functions), [fonction flèche ES6 avec crochets] (https://stackoverflow.com/questions/38730747/es6- arrow-function-with-brackets) – trincot

Répondre

1

Les fonctions de flèches de corps concises renvoient implicitement une valeur tandis que pour les fonctions de flèches multilignes, vous devez renvoyer explicitement une valeur.

Dans votre cas, les deux auront même résultat net

+0

Avant de répondre, s'il vous plaît obtenir votre terminologie droite. Le terme "grosse flèche" n'a pas été utilisé depuis plusieurs années. En outre, ce n'est pas une "ligne unique"; c'est un "corps concis". –

+0

@torazaburo Comment savez-vous que le terme «grosse flèche» n'a pas été utilisé depuis plusieurs années? avez-vous des statistiques? même chose pour "single line" – alt255

+0

Il est difficile de prouver un négatif. Veuillez rechercher des références au terme "grosse flèche" dans la spécification, ou sur MDN. Le terme technique pour la forme non-'{}' est parfaitement clair: c'est un "corps concis". Un corps concis peut être plusieurs lignes, comme dans '() => 1 + (NEWLINE) 2'. –

2

Une différence est que le retour littéraux d'objet en utilisant la syntaxe de retour implicite nécessite l'objet littéral à envelopper entre parenthèses.

var foo =() => { bar: "foobar" }; //This function returns undefined 
var foo =() => { return { bar: "foobar" }; }; //This function returns an object 
var foo =() => ({ bar: "foobar" }); //This function returns object 

Pour autant que je sache, c'est la seule différence.

+0

je me demande si c'est pour ça que je passais par quelque chose ... pendant une méthode de filtrage ... cela ne fonctionnait pas: .filter (x => {x == 'a'}) MAIS ce DID fonctionne .filter (x => x == 'a'). Est-ce que cela a à voir avec ce que vous avez dit? – carinlynchin