我遇到了一个我遇到的问题:
return
isSomething() &&
isSomethingElse();
哪个不起作用,因为JavaScript在返回后插入分号,使上述内容等效于:
return;
isSomething() && isSomethingElse();
这完全让我感到困惑,为什么会这样做。我发现了一些有关该主题的Stack Overflow问题(例如this,this和this),但他们只是解释了它何时这样做,指的是specs。
我甚至无法想象我希望有一个return;
语句以及其他一些有效的JavaScript语句(除非你使用goto
或者其他一些我从未听说过的模糊JavaScript)。在我看来,这只会导致问题。
我想知道为什么会这样做。为什么这部分规范?
关于关闭重复。我想我清楚地说过,我读过其他问题和答案,说它是JavaScript规范的一部分,甚至把我的问题与其他问题区分开来。在密切原因中链接的问题不包含对这个问题的答案,并且与我在回答我的问题时所链接的其他三个问题的形式完全相同。
确切的原因可能会在时间的迷雾中消失。我愿意打赌它发生的事情是这样的:
return
语句一起使用分号时,有人注意到语法含糊不清。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认为它很聪明,决定你忘记分号并为你插入它们。
这是一个“功能”,而不是一个bug。
Javascript are optional中的分号。