JavaScript open brace in the same line

后端 未结 6 1562
心在旅途
心在旅途 2020-12-16 03:50

I remember there is a convention/recommendation to put opening brace in the same line, because of the way JavaScript adds a semicolon or something.

//OK
fun         


        
相关标签:
6条回答
  • 2020-12-16 04:25

    The JavaScript Garden has a chapter about automatic semicolon insertion. It gives good examples when semicolons are added automatically:

    JavaScript is not a semicolon-less language, it in fact needs the semicolons in order to understand the source code. Therefore the JavaScript parser automatically inserts them whenever it encounters a parse error due to a missing semicolon.

    In your example JavaScript wouldn't encounter an error due to a missing semicolon though.

    0 讨论(0)
  • 2020-12-16 04:31

    The issue you are thinking of is for return statements.

    return {
      value: 'test'
    }
    

    Works fine, but the following does not:

    return
    {
      value: 'test'
    }
    

    JavaScript adds a semicolon after return turning the above into:

    return;
    {
      value: 'test'
    }
    
    0 讨论(0)
  • 2020-12-16 04:32

    There is no issue with declaring functions, but you can get into trouble when returning objects:

    function foo()
    { // this is OK
    
        return
        { // this is BAD!
            name: "bletch"
        };
        // actually returns undefined!
    }
    

    A semi-colon is automatically inserted after the return statement, and that will break your code.

    0 讨论(0)
  • 2020-12-16 04:35

    Douglas Crockford gives a reason for choosing the K&R style [1]:

    "I always use the K&R style, putting the { at the end of a line instead of the front, because it avoids a horrible design blunder in JavaScript's return statement.

    The blunder he is referring to is how JavaScript handles the return statement differently in the following two scenarios:

    return {
       'status': 'ok'
    };
    

    ... and:

    return 
    {
       'status': 'ok'
    };
    

    The first one will return an object with a status property, while the latter will return undefined because of semicolon insertion."

    [1] Douglas Crockford: JavaScript: The Good Parts: Style (p. 96)

    0 讨论(0)
  • 2020-12-16 04:48

    This post on Elegant Code gives some explanation of automatic semicolon insertion, but in regard to returning objects, not declaring functions.

    0 讨论(0)
  • 2020-12-16 04:50

    It's a myth. function blah() is always required to be followed by a expression block, so makes no difference which style you use. The first style is simply the most widely used form.

    0 讨论(0)
提交回复
热议问题