When should I use `return` in es6 Arrow Functions?

后端 未结 5 2235
后悔当初
后悔当初 2020-11-21 05:40

The new es6 arrow functions say return is implicit under some circumstances:

The expression is also the implicit return value of that fun

5条回答
  •  星月不相逢
    2020-11-21 05:47

    Jackson has partially answered this in a similar question:

    Implicit return, but only if there is no block.

    • This will result in errors when a one-liner expands to multiple lines and the programmer forgets to add a return.
    • Implicit return is syntactically ambiguous. (name) => {id: name}returns the object {id: name}... right? Wrong. It returns undefined. Those braces are an explicit block. id: is a label.

    I would add to this the definition of a block:

    A block statement (or compound statement in other languages) is used to group zero or more statements. The block is delimited by a pair of curly brackets.

    Examples:

    // 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') 
    

提交回复
热议问题