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')
Można niejawnie zwrócić obiekt czy chcesz odczuwalna. so: '((name) => ({id: name})) ('Louis')' – vdclouis
@vdclouis Tak, to jest drugi doostatniego przykład: '((name) => ({id: name })) ('Jess') // zwraca {id: 'Jess'} ' –
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'})) –