您是否建议在JavaScript中的每个语句后使用分号?

时间:2009-01-14 18:14:04

标签: javascript

在许多情况下,如果您将它们遗漏,JavaScript解析器将为您插入分号。我的问题是,你把它们遗弃了吗?

如果您不熟悉规则,则会在Mozilla site上对分号插入进行说明。这是关键点:

  

如果JavaScript程序表单的第一个到第n个 th 标记在语法上有效,但第一个到第n + 1个 st 标记不是并且有一行在n th 标记和n + 1 st 标记之间断开,然后解析器尝试在n 之间插入虚拟分号标记后再次解析程序和n + 1 st 令牌。

该描述可能不完整,因为它没有解释@ Dreas的例子。任何人都有完整规则的链接,或者看看为什么这个例子得到一个分号? (我在JScript.NET中尝试过。)

This stackoverflow question是相关的,但仅涉及特定情况。

11 个答案:

答案 0 :(得分:74)

是的,您应该在JavaScript中的每个语句后使用分号。

答案 1 :(得分:44)

在没有分号的情况下打破的模糊情况:

// define a function
var fn = function () {
    //...
} // semicolon missing at this line

// then execute some code inside a closure
(function () {
    //...
})();

这将被解释为:

var fn = function () {
    //...
}(function () {
    //...
})();

我们最终将第二个函数作为参数传递给第一个函数,然后尝试将第一个函数调用的结果作为函数调用。第二个函数将在运行时因“...不是函数”错误而失败。

答案 2 :(得分:16)

是的,你应该总是使用分号。为什么?因为如果你最终使用的是JavaScript压缩器,那么你的所有代码都会在一行上,这会破坏你的代码。

试试http://www.jslint.com/;它会伤害你的感受,但会告诉你很多方法来编写更好的JavaScript(其中一种方法是始终使用分号)。

答案 3 :(得分:11)

每个人似乎都错过了JavaScript中的分号不是语句终结符而是语句分隔符。这是一个微妙的差异,但它对解析器的编程方式很重要。像对待他们一样对待他们,你会发现离开他们会感觉更自然。

我已经在其他语言中编程,其中分号是一个语句 separator ,也是可选的,因为解析器在新行上执行“分号插入”,它不会破坏语法。所以当我在JavaScript中找到它时,我并不陌生。

我不喜欢语言中的噪音(这是我对Perl不好的一个原因),而且冒号是JavaScript中的噪音。所以我省略了它们。

答案 4 :(得分:10)

我会说一致性比保存几个字节更重要。我总是包括分号。

另一方面,我想指出有很多地方分号在语法上是不需要的,即使压缩器正在对所有可用的空格进行核对。例如在一个街区结束时。

if (a) { b() }

答案 5 :(得分:8)

JavaScript会在解释代码时自动插入分号,因此如果将return语句的值放在行下面,则不会返回:

您的密码:

return
5

JavaScript解释:

return;
5;

因此,由于JavaScript的自动分号插入

,所以没有返回任何内容

答案 6 :(得分:7)

我认为这与上一次播客讨论的内容类似。 “你接受的是自由主义”意味着必须在Javascript解析器中加入额外的工作来修复分号被遗漏的情况。现在我们有一大堆页面出现错误的语法,当某些浏览器决定对它接受的内容稍微严格一些时,可能会在未来的某一天中断。此类规则也应适用于HTML和CSS。您可以编写损坏的HTML和CSS,但是当某些浏览器无法正确解释您的错误代码时,如果您变得奇怪且难以调试行为,则不会感到惊讶。

答案 7 :(得分:6)

文章Semicolons in JavaScript are optional对于在Javascript中不使用半冒号提出了一些非常好的观点。它涉及这个问题的答案提出的所有要点。

答案 8 :(得分:5)

这是我在任何地方找到的best explanation of automatic semicolon insertion。它将清除你所有的不确定性和怀疑。

答案 9 :(得分:1)

不,只在需要时才使用分号。

答案 10 :(得分:1)

我使用分号,因为这是我的习惯。 现在我理解为什么我不能将字符串分成两行...它在每行的末尾加上分号。