【问题标题】:JavaScript open brace in the same lineJavaScript 在同一行中打开大括号
【发布时间】:2011-02-24 16:31:04
【问题描述】:

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

//OK
function blah(){
};

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

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

这是真的吗?还是只是一个神话?

【问题讨论】:

标签: javascript


【解决方案1】:

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

return {
  value: 'test'
}

工作正常,但以下不正常:

return
{
  value: 'test'
}

JavaScript 在return 后面加上一个分号,把上面的变成:

return;
{
  value: 'test'
}

【讨论】:

  • 很遗憾:仅仅因为return语句的这个问题,大多数JS代码到处都使用same-line-opening-braces。嗯。
  • @lorancou:嘿!我喜欢把我的大括号放在同一行:-P
  • 这显然是因为 JS 破坏了你 ;)
  • @lorancou:实际上 Java 破坏了我(那是我的第一门语言):-P
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    Douglas Crockford 给出了选择 K&R 风格的理由 [1]:

    “我总是使用 K&R 样式,将 { 放在行尾而不是前面,因为它避免了 JavaScript 的 return 语句中的可怕设计错误。

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

    return {
       'status': 'ok'
    };
    

    ...和:

    return 
    {
       'status': 'ok'
    };
    

    第一个会返回一个带有 status 属性的对象,而后者会因为分号插入而返回 undefined。”

    [1] Douglas Crockford:JavaScript:好的部分:风格(第 96 页)

    【讨论】:

      【解决方案4】:

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

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

      在您的示例中,JavaScript 不会因为缺少分号而遇到错误。

      【讨论】:

        【解决方案5】:

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

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

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

        【讨论】:

          【解决方案6】:

          这是一个神话。 function blah() 后面总是需要跟一个表达式块,所以你使用哪种样式没有区别。第一种样式只是使用最广泛的形式。

          【讨论】:

            猜你喜欢
            • 2018-05-14
            • 2018-08-14
            • 2017-09-29
            • 2019-11-20
            • 1970-01-01
            • 2021-07-03
            • 2018-07-26
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多