在许多情况下,如果您将它们遗漏,JavaScript解析器将为您插入分号。我的问题是,你把它们遗弃了吗?
如果您不熟悉规则,则会在Mozilla site上对分号插入进行说明。这是关键点:
如果JavaScript程序表单的第一个到第n个 th 标记在语法上有效,但第一个到第n + 1个 st 标记不是并且有一行在n th 标记和n + 1 st 标记之间断开,然后解析器尝试在n 之间插入虚拟分号标记后再次解析程序和n + 1 st 令牌。
该描述可能不完整,因为它没有解释@ Dreas的例子。任何人都有完整规则的链接,或者看看为什么这个例子得到一个分号? (我在JScript.NET中尝试过。)
This stackoverflow question是相关的,但仅涉及特定情况。
答案 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)
我使用分号,因为这是我的习惯。 现在我理解为什么我不能将字符串分成两行...它在每行的末尾加上分号。