JavaScript中Allman风格的危险含义

JavaScript中Allman风格的危险含义,javascript,code-formatting,Javascript,Code Formatting,我不记得在哪里了,但最近我发表了一条评论,用户告诉我在JavaScript中1TB比Allman更受欢迎,并说Allman在JavaScript中有危险的含义 这是一份有效的声明吗?如果是,为什么?返回后不能有行终止符: return { }; 被视为返回(return未定义),而不是return{}(返回一个对象) 更多信息请参见规则。我认为这取决于声明。例如,如果大括号位于新行,则返回语句可能会中断 这是一个有效的语句 因为JavaScript的引擎有所谓的ASI(自动分号插入),它在

我不记得在哪里了,但最近我发表了一条评论,用户告诉我在JavaScript中1TB比Allman更受欢迎,并说Allman在JavaScript中有危险的含义


这是一份有效的声明吗?如果是,为什么?

返回
后不能有
行终止符

return
{


};
被视为
返回
(return
未定义
),而不是
return{}(返回一个对象)


更多信息请参见规则。

我认为这取决于声明。例如,如果大括号位于新行,则返回语句可能会中断

这是一个有效的语句

因为JavaScript的引擎有所谓的ASI(自动分号插入),它在返回行插入分号(如果需要)。“如有必要”是含糊不清的;有时有效,有时无效。看

因此,正如其他答案所说:

return
{
};

// Is read by the JavaScript engine, after ASI, as:
return; // returns undefined
{ // so this is not even executed
};
因此,不建议将其用于
return
语句


但是,如果您的指导方针建议函数声明使用Allman样式,那么这是完全正确的。我知道有一些是这样的。

也许说它与ASI相关是一个好的答案?我已经长大了,非常喜欢javascript,但这仍然是一个好问题weird@FlorianMargaine给我一点时间解释一下:
分号在JavaScript中是必需的;它们只是JavaScript中不需要的。
还有更多受ASI影响的语句,请查看@Esailija发布的规范链接或查看,我在那里总结了ASI规则。。。啊,只是为了好玩,试着通过以下测试:参见
return
{
};

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