JavaScript open brace in the same line

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
function blah(){
};

//Probably not OK
function blah() 
{
};

But I don't find a relevant source to confirm/deny this.

Is this true? Or just a myth?

Answers


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


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'
}

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)


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.


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.


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.


Need Your Help

What characters are permitted for haskell operators?

haskell syntax operators

Is there a complete list of allowed characters somewhere, or a rule that determines what can be used in an identifier vs an operator?

Faster code-completion with clang

c++ clang llvm code-completion libclang

I am investigating potential code-completion speedups while using clang's code-completion mechanism. The flow described below is what I found in rtags, by Anders Bakken.