你是否推荐在JavaScript中的每个语句之后使用分号?

在很多情况下,JavaScriptparsing器会为您插入分号,如果您将它们排除在外。 我的问题是,你离开他们吗?

如果您不熟悉规则,则在Mozilla网站上有一个分号插入的说明。 关键是:

如果JavaScript程序forms的第一至第n 令牌在语法上是有效的,但是第一至第n个令牌不是,并且在第n 令牌和第n + 1 令牌之间存在换行符,则parsing器尝试在第n 和第n + 1 令牌之间插入虚拟分号令牌后再次parsing程序。

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

这个stackoverflow问题是相关的,但只谈一个具体的情况。

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

一个模棱两可的情况,在没有分号的情况下打破:

// define a function var fn = function () { //... } // semicolon missing at this line // then execute some code inside a closure (function () { //... })(); 

这将被解释为:

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

我们最终将第二个函数作为parameter passing给第一个函数,然后尝试将第一个函数调用的结果作为函数调用。 第二个函数在运行时会失败,出现“…不是函数”错误。

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

尝试http://www.jslint.com/ ; 它会伤害你的感觉,但是给你展示写更好的JavaScript的许多方法(其中一种方法是总是使用分号)。

大家似乎错过的是JavaScript中的分号不是语句结束符,而是语句分隔符 。 这是一个微妙的差异,但parsing器编程的方式是非常重要的。 对待他们就像他们是什么,你会发现离开他们会感觉更自然。

我已经编写了其他语言的分号是一个语句分隔符 ,也是可选的,因为parsing器在换行符不会中断语法的“分号插入”。 所以当我在JavaScript中find它的时候我并不陌生。

我不喜欢语言中的噪音(这是我在Perl上不好的原因之一),而分号在JavaScript中是噪音。 所以我省略了它们。

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

另一方面,我想指出的是,在很多地方,分号并不是语法所必需的,即使压缩器是在扫描所有可用的空格。 例如在一个块的结尾处。

 if (a) { b() } 

JavaScript在解释你的代码的时候会自动插入分号,所以如果你把return语句的值放在行的下面,它将不会被返回:

你的代码:

 return 5 

JavaScript解释:

 return; 5; 

因此,由于JavaScript的自动分号插入,没有任何返回

我觉得这跟上次的播客有点类似。 “接受自由”意味着必须将额外的工作放入Javascriptparsing器中,以修复分号被遗漏的情况。 现在,我们有一大堆页面出现在语法错误的地方,当某些浏览器决定对接受的内容稍微严格一点的时候,将来有一天可能会中断。 这种types的规则也应该适用于HTML和CSS。 你可以编写错误的HTML和CSS,但是如果某些浏览器没有正确解释你错误的代码,当你弄怪并且很难debugging行为的时候,不要惊讶。

在JavaScript中的文章Semicolons是可选的,使得一些关于在Javascript中不使用分号的真正优点。 它处理所有这些问题的答案所提出的观点。

这是我在任何地方find的自动分号插入的最好解释 。 这将清除你所有的不确定性和怀疑。

我用分号,因为这是我的习惯。 现在我明白了为什么我不能把string分成两行……它在每行的末尾加上分号。

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