JavaScript是否支持新行?

时间:2010-07-10 10:15:47

标签: javascript coding-style conventions

在工作中,我们将括号放在下一行,但在家里,我却反其道而行之。你更倾向哪个? (K& R vs OTBS)

function something() {
    // ...
}

function something()
{
    // ...
}

很多JavaScript库似乎都使用OTBS(一种真正的大括号样式)。我想跟随它们以便在其他JavaScript项目中保持一致,但K& R风格看起来不是更具可读性吗?

注意:我们知道JavaScript中返回和大括号的问题,这将始终是一个例外。但是,这只是一个案例。

9 个答案:

答案 0 :(得分:145)

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

  

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

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

return {
   'status': 'ok'
};

......和:

return 
{
   'status': 'ok'
};

第一个将返回一个具有status属性的对象,而后一个将返回undefined,因为semicolon insertion


1 Douglas Crockford: JavaScript: The Good Parts: Style (page 96) - ISBN: 978-0596517748.

答案 1 :(得分:32)

这是一场你永远无法得到有用答案的圣战!只要坚持使用项目中的其他人,不要争论!

为了它的价值,我是一个K& Rite。我发现OTBS在开放结构和下面的语句之间放置了很多视觉空间,当这两行通常密切相关时,可以更好地一起呈现,而不会介入几乎空白的行。我希望保留空白行以分隔相关语句块。

无论如何,在很多空格的编码风格中,这可能相对不重要。但就个人而言,我非常重视简洁,所以我可以在屏幕上保留更多的节目。

我不认为在闭合支架的不同柱上使用开放式支架是一个问题。从凹痕中很容易看到块状。除非你使用悬挂缩进。不要那样做。但这完全是另一场圣战。

答案 2 :(得分:18)

我遵循Douglas Crockford的JavaScript编码约定,该约定受Sun的Java风格指南的启发。

以下是指向它的链接:http://javascript.crockford.com/code.html

答案 3 :(得分:12)

在我看来,这取决于还有谁将使用您的代码。如果你在一个C#团队工作并分担很多责任,那就把它放在一个新的界限上,避免不可避免的争吵。如果您使用大量PHP(或较旧的JS程序员),请将其放在第一行,原因完全相同。

但如果你正在寻找更具权威性的东西,道格拉斯·克罗克福德说开口支撑应该是always be on the top line。如果我没记错的话,他的推理是,它使它与其他语言保持一致。基本上,因为这是有效的,但(可能)代码不正确:

function myFunc() 
{
    return 
    {
      ok: true
    };
} 

...你应该普遍避免在新线上打开括号。为什么?因为编程风格会导致语法模糊。

上面的示例代码是有效的,因为它在语法上完全正确,如果您编写此代码,则不会引发异常。但是,它不会返回对象文字{ok:true},而是返回undefined,并且无法访问其下方的代码。将开口括号放在一行,它将返回您可能期望的对象文字。

问题是,你觉得这个论点足够引人注目吗?

答案 4 :(得分:6)

两者都不比另一个好。只需选择一个并持续使用它。

答案 5 :(得分:5)

所有主观。有些稍好一些,但差别可以忽略不计。 最重要的事情是在所有代码中保持一致。

就个人而言,我更喜欢隐藏式,有4个空间'真实'标签。

function a() {
    if (b) {
        do;
    } else {
        do2;
    }
}

答案 6 :(得分:3)

我更喜欢它们在同一行,但主要是因为我将匿名函数作为参数传递了很多...它节省了一些空间并使函数定义看起来不那么刺耳。当然,这只是一个观点,我同意Bytecode Ninja的观点,即一致性是最重要的。

答案 7 :(得分:0)

正如许多答案中所述,最重要的是你找到一种你(和/或你的队友,如果适用的话)坚持的风格。就个人而言,我更喜欢同一行,因为我发现如果你正在使用闭包和嵌套函数,那么在新行上放置大括号会导致许多近空行,这会使代码对我来说不那么可读(尽管可能不适用于大多数人......)

答案 8 :(得分:0)

由于上面列出的相同原因,我更喜欢K& R方法。它看起来更紧凑,两条相关的线组合在一起。