2015-02-27 17 views
364

Po powrocie obiektu z funkcją strzałki, wydaje się, że jest to niezbędne do korzystania z dodatkowego zestawu {} i instrukcji return z powodu niejasności w gramatyki:ECMAScript6 funkcja strzałka, która zwraca obiekt

p => { return { foo: 'bar' } }

Jeśli funkcja zwraca strzałka nic innego, {} i powrotu są niepotrzebne, np:

p => 'foo'

Czy jest czymś oczywistym mi brakuje?

Odpowiedz

632

Należy zawinąć literał zwracanego obiektu do nawiasów. W przeciwnym razie nawiasy klamrowe będą oznaczały ciało funkcji. Następujące prace:

p => ({ foo: 'bar' }); 

Nie trzeba owinąć każdą inną ekspresję w nawiasach:

p => 10; 
p => 'foo'; 
p => true; 
p => [1,2,3]; 
p => null; 
p => /^foo$/; 

i tak dalej.

+4

Jestem ciekawy * dlaczego * the parens robią różnicę. – wrschneider

+18

@wrschneider ponieważ bez parens js parser uważa, że ​​jest to ciało funkcyjne, a nie obiekt, a foo to [etykieta] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/label) – alexpods

+7

Zawijanie literału obiektu w nawiasach sygnalizuje, że nawiasy klamrowe są literałami obiektów, a nie treścią funkcji. –

37

Można się zastanawiać, dlaczego składnia jest poprawna (ale nie działa zgodnie z oczekiwaniami):

var func = p => { foo: "bar" } 

To z powodu JavaScript's label syntax:

Więc jeśli transpile powyższy kod do ES5, powinno to wyglądać na przykład:

var func = function (p) { 
    foo: 
    "bar"; //obviously no return here! 
} 
2

Jeśli treść funkcji strzałki jest zawijana w nawiasy klamrowe, nie jest ona zwracana w sposób niejawny. Zawiń obiekt w nawiasach. Wyglądałoby to mniej więcej tak.

p => ({ foo: 'bar' }) 

przez owinięciu parens funkcja zwraca { foo: 'bar }.

Mamy nadzieję, że to rozwiąże problem. Jeśli nie, ostatnio napisałem artykuł o funkcjach Arrow, który opisuje go bardziej szczegółowo. Mam nadzieję, że okaże się to przydatne. Javascript Arrow Functions

+4

Publikowanie linku do własnego bloga jest problematyczne. Przeczytaj [Jak nie być spamerem] (/ pomoc/promocja). – tripleee

+3

Samo podłączenie do własnej biblioteki lub samouczka nie jest dobrą odpowiedzią. Powiązanie z nim, wyjaśnienie, dlaczego rozwiązuje problem, dostarczenie kodu, w jaki sposób to zrobić, i rezygnacja z tego, że napisałeś, daje lepszą odpowiedź. Zobacz: [** Co oznacza "dobra" autopromocja? **] (// meta.stackexchange.com/q/182212) –

+0

Z pewnością jednak odpowiedziałem na pytanie w pierwszym zdaniu? Po sprawdzeniu przewodnika, jak nie być spamerem, uważam, że moja odpowiedź mieści się w wytycznych. –

Powiązane problemy