为什么JavaScript设计为在返回后跟一个新行自动插入分号?

问题描述 投票:5回答:3

我遇到了一个我遇到的问题:

return
    isSomething() &&
    isSomethingElse();

哪个不起作用,因为JavaScript在返回后插入分号,使上述内容等效于:

return;
isSomething() && isSomethingElse();

这完全让我感到困惑,为什么会这样做。我发现了一些有关该主题的Stack Overflow问题(例如thisthisthis),但他们只是解释了它何时这样做,指的是specs

我甚至无法想象我希望有一个return;语句以及其他一些有效的JavaScript语句(除非你使用goto或者其他一些我从未听说过的模糊JavaScript)。在我看来,这只会导致问题。

我想知道为什么会这样做。为什么这部分规范?

关于关闭重复。我想我清楚地说过,我读过其他问题和答案,说它是JavaScript规范的一部分,甚至把我的问题与其他问题区分开来。在密切原因中链接的问题不包含对这个问题的答案,并且与我在回答我的问题时所链接的其他三个问题的形式完全相同。

javascript syntax
3个回答
4
投票

确切的原因可能会在时间的迷雾中消失。我愿意打赌它发生的事情是这样的:

  • 在某些时候,有人认为在语句结尾处使分号可选是个好主意。
  • 后来,当你用你所描述的方式与return语句一起使用分号时,有人注意到语法含糊不清。
  • 然后修改了形式语言规范,其中包含关于返回语句中省略分号的令人困惑的新规则,以编纂当前实践而不是将规则更改为有意义。

1
投票

Javascript具有这种“聪明”功能,使得分号在代码中通常是可选的。如果将分号留在行尾,则会将它们添加到行尾。根据the codeacademy article on the subject

The semicolon is only obligatory when you have two or more statements on the same line:

var i = 0; i++        // <-- semicolon obligatory
                      //     (but optional before newline)
var i = 0             // <-- semicolon optional
    i++               // <-- semicolon optional

所以基本上,你不能在这样的多行中破坏你的代码,因为Javascript认为它很聪明,决定你忘记分号并为你插入它们。


-2
投票

这是一个“功能”,而不是一个bug。

Javascript are optional中的分号。

© www.soinside.com 2019 - 2024. All rights reserved.