【问题标题】:Are semicolons mandatory in javascript statements? [duplicate]javascript 语句中必须使用分号吗? [复制]
【发布时间】:2011-11-13 01:30:34
【问题描述】:

我想知道,这合法吗?

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

或者我应该这样写:

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

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

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

【问题讨论】:

  • 见:stackoverflow.com/questions/7219541/… 和其他问题的答案
  • 你的两个语句都有分号 - 两者都不同。
  • @Nightfirecat - 他们最初并没有,看起来 NullUserException 的编辑把分号放回去了。编辑:但后来又把它删除了!
  • @Nightfirecat 。对不起,我更新了它

标签: javascript


【解决方案1】:

分号并不总是强制性的,但我总是建议使用它们。自动分号插入规则见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 并且可能最终对您出错的地方感到非常困惑!这就是为什么我完全同意你的问题中关于自动分号插入是一个可怕的错误的说法。

【讨论】:

  • 一个合理的例外是单行回调:ar.sort(function(a, b) { return f(a) - f(b) })
【解决方案2】:

分号不是强制性的。如果缺少实际上会导致此代码返回 undefined,它们会自动添加到行尾。

return
{
   text:"hello"
}

【讨论】:

  • @NullUserExceptionఠ_ఠ 更新了我的答案。谢谢
猜你喜欢
  • 2023-01-25
  • 2019-07-11
  • 1970-01-01
  • 2016-06-26
  • 1970-01-01
  • 1970-01-01
  • 2010-10-06
  • 1970-01-01
  • 2015-02-03
相关资源
最近更新 更多