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

Mat*_*els 5 javascript syntax

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

return
    isSomething() &&
    isSomethingElse();
Run Code Online (Sandbox Code Playgroud)

这是行不通的,因为javascript在返回后插入分号,使得上面的等价于:

return;
isSomething() && isSomethingElse();
Run Code Online (Sandbox Code Playgroud)

这完全让我感到困惑,为什么会这样做.我发现了一些关于该主题的StackOverflow问题(例如this,thisthis),但他们只是解释了"何时"这样做,参考规范.

我甚至无法想象我想要一个return;声明后跟一些其他有效的javascript语句的情况(除非你使用goto或者我可能没有听说过其他一些模糊的javascript).在我看来,这只会导致问题.

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

编辑:关于重复的结束.我想,我明确表示,我读其他的问题和答案,指出它是JavaScript的规范的一部分,甚至把区别于其他人在我的问题的一部分大胆.在密切原因中链接的问题包含对这个问题的答案,并且与我在回答我的问题时所链接的其他三个问题的形式完全相同.

Gre*_*ill 4

确切的原因可能已经消失在时间的迷雾中。我敢打赌,事情的发生是这样的:

  • 在某些时候,有人认为在语句末尾使分号可选是一个好主意。
  • 后来,其他人注意到语法中存在歧义,当按照return您描述的方式与语句一​​起使用时省略分号。
  • 然后,正式语言规范被修改为关于在返回语句中省略分号的令人困惑的新规则,以编纂当前的实践,而不是改变规则以使其有意义。

  • 除非布兰登·艾奇想过来告诉我们到底发生了什么,否则这似乎是对实际发生的事情的一个很好的猜测。 (4认同)