12

直到最近我才意识到这一点,但我在编写 javascript 代码时使用了Allman 风格。

根据http://encosia.com/in-javascript-curly-brace-placement-matters-an-example/我应该使用K&R 风格。这是因为在某些情况下,将大括号放置在下一行会导致问题。对我来说,问题是我已经越来越喜欢 Allman 风格并且宁愿不改变。

所以,我的问题

  • 由于javascript中大括号的放置,allman样式是否会导致错误?jquery怎么样?

  • 有没有什么技巧可以让我使用 Allman 风格而不会因为大括号而出现问题?

  • 使用这些样式是否还有其他问题?

4

2 回答 2

8

由于javascript中大括号的放置,allman样式是否会导致错误?

是的。正如您的链接所解释的,return后跟换行符的语句会使解析器在尝试插入分号时感到困惑。但是,此行为不限于返回对象字面量。以下功能:

function foo()
{
    return
        "bar";
}

也会回来undefined

jquery怎么样?

无论是否包含 jQuery,情况都完全相同。

有没有什么技巧可以让我使用 Allman 风格而不会因为大括号而出现问题?

是的,不要将 Allman 样式与对象文字一起使用。考虑您要将对象文字分配给变量。你真的要写:

var foo =
{
    bar: "quux"
};

或者你会去:

var foo = {
    bar: "quux"
};

恕我直言,第二个片段比第一个片段更具可读性。您可以继续使用 Allman 样式,其中包含forifwhilefunction等大括号,但对象字面量除外。

使用这些样式是否还有其他问题?

return是一个非常特殊的情况,因为它在有或没有参数的情况下都是有效的。当遇到return一行单独的语句时,解析器无法判断是应该添加分号以使单行语句有效,还是继续下一行并希望最好。

出于这个原因,我认为这种行为只会成为问题,return也许throw,而不是其他陈述。

于 2012-09-02T07:24:56.727 回答
2

请记住有关自动分号插入的 ECMAScript 规范

某些 ECMAScript 语句(空语句、变量语句、表达式语句、do-while语句、continue语句、break 语句、return语句throw语句)必须以分号结尾。这样的分号可能总是显式地出现在源文本中。然而,为方便起见,在某些情况下,源文本中可能会省略此类分号。这些情况是这样描述的,在这些情况下分号会自动插入到源代码令牌流中。

我嘲笑上面的建议是“方便”......

虽然您在技术上可以在上面未涵盖的情况下继续使用 Allman 格式,但我会宣扬一致性。就我个人而言,我是Google JS 样式指南的粉丝- 与您的问题相关的部分是代码格式分号。那里列出的示例值得一试。

于 2012-09-02T08:25:03.720 回答