2015-03-05 9 views

Odpowiedz

173

Jackson ma częściowo answered this w podobnym pytaniem:

niejawnego zamian, ale tylko wtedy, gdy nie ma żadnego bloku.

  • Spowoduje to błędy, gdy jednolinijkowy rozszerzy się na wiele linii, a programista zapomni dodać return.
  • Powrót niejawny jest składniowo niejednoznaczny. (name) => {id: name} zwraca obiekt {id: name} ... prawda? Źle. Zwraca undefined. Te aparaty są wyraźnym blokiem. id: to etykieta.

Dodałbym do tej definicji block:

Oświadczenie blok (lub oświadczenie związek w innych językach) jest używany do grupy zero lub więcej instrukcji. Blok jest ograniczony przez parę nawiasów klamrowych.

Przykłady:

// returns: undefined 
// explanation: an empty block with an implicit return 
((name) => {})() 

// returns: 'Hi Jess' 
// explanation: no block means implicit return 
((name) => 'Hi ' + name)('Jess') 

// returns: undefined 
// explanation: explicit return required inside block, but is missing. 
((name) => {'Hi ' + name})('Jess') 

// returns: 'Hi Jess' 
// explanation: explicit return in block exists 
((name) => {return 'Hi ' + name})('Jess') 

// returns: undefined 
// explanation: a block containing a single label. No explicit return. 
// more: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/label 
((name) => {id: name})('Jess') 

// returns: {id: 'Jess'} 
// explanation: implicit return of expression () which evaluates to an object 
((name) => ({id: name}))('Jess') 

// returns: {id: 'Jess'} 
// explanation: explicit return inside block returns object 
((name) => {return {id: name}})('Jess') 
+3

Można niejawnie zwrócić obiekt czy chcesz odczuwalna. so: '((name) => ({id: name})) ('Louis')' – vdclouis

+2

@vdclouis Tak, to jest drugi doostatniego przykład: '((name) => ({id: name })) ('Jess') // zwraca {id: 'Jess'} ' –

+0

Nie otrzymuję tej składni .. czy tworzysz klasę używając klasy littoral, a następnie wywołując domniemaną c onstructor z jednym argumentem ("Jess")? Myślałem, że to zrobisz ((name) => ({id: 'Jess'})) –

10

rozumiem ta zasada-of-kciuk ...

Dla funkcji, które skutecznie przekształca (one-line-manipulacje argumentów) , return jest niejawny.

Kandydaci to:

// square-root 
value => Math.sqrt(value) 

// sum 
(a,b) => a+b 

przypadku innych operacji (więcej niż jednej wkładki, które wymagają blok, zwrot musi być jawne

Powiązane problemy