javascript语句中是否必须使用分号?

Kan*_*iya 9 javascript

我想知道,这是合法的吗?

function test()
{
    alert ("hello")
    $("#loading").show();
}
Run Code Online (Sandbox Code Playgroud)

或者我应该写这个:

function test()
{
    alert ("hello");
    $("#loading").show();
}
Run Code Online (Sandbox Code Playgroud)

JavaScript中的分号是否可选?因为我在论坛中看到了这个:

不,分号在JavaScript中通常是可选的(google用于ASI /自动分号插入).使用它们会使代码看起来更清晰,ASI是一个可怕的错误功能(至少在我看来).

Jam*_*ice 17

分号并不总是强制性的,但我总是建议使用它们.有关自动分号插入的规则,请参阅ECMAScript规范:

某些ECMAScript语句(空语句,变量语句,表达式语句,do-while语句,continue语句,break语句,return语句和throw语句)必须以分号结束.此类分号可能始终显式出现在源文本中.然而,为方便起见,在某些情况下可以从源文本中省略这样的分号.这些情况通过说在这些情况下分号自动插入源代码令牌流来描述.

更新(进一步解释)

也许最常见的情况用于说明为什么自动分号插入可能是坏的,这是@sissonb在另一个答案中提到的.考虑以下:

function something(a, b) {
    return
    a + b;
}
Run Code Online (Sandbox Code Playgroud)

你可能期望的是新行被忽略,代码解释为:

function something(a, b) {
    return a + b;
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,自动分号插入发挥作用,代码实际上解释如下:

function something(a, b) {
    return;
    a + b;
}
Run Code Online (Sandbox Code Playgroud)

return语句表示函数返回undefined.因此,不是两个论点中的一个很好的总和,你得到undefined并可能最终对你出错的地方感到困惑!这就是为什么我完全同意你的问题中的声明,即自动分号插入是一个可怕的错误.