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

时间:2011-11-13 01:30:35

标签: javascript

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

function test()
{
    alert ("hello")
    $("#loading").show();
}

或者我应该写这个:

function test()
{
    alert ("hello");
    $("#loading").show();
}

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

  

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

2 个答案:

答案 0 :(得分:17)

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

  

某些ECMAScript语句(空语句,变量语句,   表达式语句,do-while语句,continue语句,break   必须终止语句,return语句和throw语句   用分号。这样的分号可能总是明确地出现在   源文本。然而,为方便起见,可省略这样的分号   在某些情况下从源文本。这些情况是   描述说分号是自动插入的   这些情况下的源代码令牌流。

更新(进一步解释)

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

function something(a, b) {
    return
    a + b;
}

您可能期望忽略新行,并将代码解释为:

function something(a, b) {
    return a + b;
}

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

function something(a, b) {
    return;
    a + b;
}

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

答案 1 :(得分:0)

分号不是强制性的。如果它们丢失,它们会自动添加到一行的末尾,这实际上导致此代码返回未定义。

return
{
   text:"hello"
}