JavaScript开放式大括号在同一行

时间:2011-02-24 16:31:05

标签: javascript

我记得有一个约定/建议将开括号放在同一行,因为JavaScript添加分号或其他东西的方式。

//OK
function blah(){
};

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

但我没有找到相关来源来确认/否认这一点。

这是真的吗?或者只是一个神话?

6 个答案:

答案 0 :(得分:24)

您正在考虑的问题是return语句。

return {
  value: 'test'
}

工作正常,但以下情况并非如此:

return
{
  value: 'test'
}

return将上述内容转换为:

后,JavaScript会添加分号
return;
{
  value: 'test'
}

答案 1 :(得分:6)

This post on Elegant Code给出了自动分号插入的一些解释,但是关于返回对象,而不是声明函数。

答案 2 :(得分:6)

道格拉斯·克罗克福德给出了选择K& R风格的理由[1]:

“我总是使用K& R风格,将{放在一行而不是前面,因为它避免了JavaScript的返回声明中可怕的设计错误。

他所指的错误是JavaScript如何在以下两种情况下以不同方式处理return语句:

return {
   'status': 'ok'
};

......和:

return 
{
   'status': 'ok'
};

第一个将返回一个具有status属性的对象,而后者将因分号插入而返回undefined。“

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

答案 3 :(得分:5)

JavaScript Garden有一章关于automatic semicolon insertion。当自动添加分号时,它给出了很好的例子:

  

JavaScript不是分号   语言,它实际上需要   用分号来理解   源代码。因此JavaScript   解析器自动插入它们   每当遇到解析错误时   由于缺少分号。

在您的示例中,由于缺少分号,JavaScript不会遇到错误。

答案 4 :(得分:3)

声明函数没有问题,但在返回对象时可能会遇到麻烦:

function foo()
{ // this is OK

    return
    { // this is BAD!
        name: "bletch"
    };
    // actually returns undefined!
}

在return语句后会自动插入一个分号,这会破坏你的代码。

答案 5 :(得分:-1)

这是一个神话。 function blah()始终需要后跟表达式块,因此您使用的样式没有区别。第一种风格是最广泛使用的形式。