关于代码格式化:JavaScript中Allman风格的危险含义

Dangerous implications of Allman style in JavaScript

我不记得在哪里,但最近我通过了评论,其中用户告诉1TBS在JavaScript中比Allman更受欢迎,并且说Allman在JavaScript中有危险的含义。

这是一个有效的陈述吗? 如果是这样,为什么?


return之后不能有LineTerminator

1
2
3
4
5
return
{


};

被视为return;(返回undefined)而不是return {};(返回一个对象)

有关详细信息,请参阅Automatic Semicolon Insertion (ASI)的规则。


这是一个有效的声明。

因为JavaScript的引擎具有所谓的ASI(自动分号插入),如果需要在行返回时插入分号。"如有必要"是模棱两可的; 有时它有效,有时则无效。 查看规则。

所以,正如其他答案所说:

1
2
3
4
5
6
7
8
return
{
};

// Is read by the JavaScript engine, after ASI, as:
return; // returns undefined
{ // so this is not even executed
};

因此不建议用于return语句。

但是,如果您的指南推荐Allman样式的函数声明,那就完全没问题了。 我知道有些事情。


1
2
3
4
5
6
7
8
9
10
11
12
return {
    a:"A",
    b:"B"
};

// vs.

return // Semicolon automatically inserted here! Uh oh!
{
    a:"A",
    b:"B"
}


我认为这取决于声明。 例如,如果open brace在新行上,则return语句可能会被破坏。 更多信息在这里。