2017-09-20 3 views
1

Gibt es einen Unterschied zwischen der Rückgabe eines Wertes in einer Pfeilfunktion, dem Hinzufügen des Körpers und der Eingabe von return?Pfeilfunktionskörper vs. Rückgabewert.() => {Rückgabewert;} vs.() => Wert;

Soweit ich weiß, sind sie gleich.

Hier ist eine Sitzung:

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

Gibt es eine Situation, wenn diese unterschiedlich sind?

+7

Ja, sie sind gleich. –

+1

mit {} können Sie body multiline machen, kein anderer Unterschied – juvian

+0

Related: [Pfeil-Funktion ohne geschweifte Klammern] (https://stackoverflow.com/questions/39629962/arrow-function-without-curly-braces), [Curly Brackets in Pfeilfunktionen] (https://stackoverflow.com/questions/35440265/curly-brackets-in-arrow-functions), [ES6 Pfeilfunktion mit Klammern] (https://stackoverflow.com/questions/38730747/es6- Pfeil-Funktion-mit-Klammern) – trincot

Antwort

1

prägnante Körperpfeilfunktionen geben implizit den Wert zurück, während für mehrzeilige Pfeilfunktionen explizit Werte zurückgegeben werden müssen.

In Ihrem Fall haben beide gleiche Nettoergebnis

+0

Bevor Sie antworten, bringen Sie bitte Ihre Terminologie in Ordnung. Der Begriff "Fettpfeil" wurde seit mehreren Jahren nicht mehr verwendet. Es ist auch keine "Einzellinie"; es ist ein "prägnanter Körper". –

+0

@torazaburo Woher wissen Sie, dass der Begriff "dicker Pfeil" seit mehreren Jahren nicht mehr verwendet wurde? Hast du irgendwelche Metriken? Gleiches für "single line" – alt255

+0

Es ist schwer, ein Negativ zu beweisen. Suchen Sie in der Spezifikation oder MDN nach Verweisen auf den Begriff "Fettpfeil". Der Fachausdruck für die Nicht-'{}' Form ist vollkommen klar: Es ist "prägnanter Körper". Ein prägnanter Körper könnte mehrzeilig sein, wie in '() => 1 + (NEWLINE) 2'. –

2

Ein Unterschied, dass Literale Objekt zurückkehr die implizite Rückkehr Syntax ist die Objektliteral erfordert in Klammern eingewickelt werden.

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 

Soweit ich weiß, ist dies der einzige Unterschied.

+0

frage mich, ob ich deswegen etwas durchgegangen bin ... während einer Filtermethode ... das hat nicht funktioniert: .filter (x => {x == 'a'}) ABER diese DID funktioniert .filter (x => x == 'a'). Hat das mit dem, was du gesagt hast, zu tun? – carinlynchin