52 javascript
在许多情况下,如果您将它们遗漏,JavaScript解析器将为您插入分号.我的问题是,你把它们遗弃了吗?
如果您不熟悉规则,则会在Mozilla网站上对分号插入进行描述.这是关键点:
如果第一至第n 个 JavaScript程序形式的令牌是语法上有效,但第一至第n + 1个ST令牌是不与存在n之间的换行符个令牌和第n + 1个ST令牌,则解析器尝试将所述n之间的虚拟分号令牌之后再次解析程序次和第n + 1个ST令牌.
这种描述可能不完整,因为它没有解释@ Dreas的例子.任何人都有完整规则的链接,或者看看为什么这个例子得到一个分号?(我在JScript.NET中尝试过.)
此stackoverflow问题是相关的,但仅涉及特定方案.
小智 74
是的,您应该在JavaScript中的每个语句后使用分号.
小智 44
在没有分号的情况下打破的模糊情况:
// define a function
var fn = function () {
//...
} // semicolon missing at this line
// then execute some code inside a closure
(function () {
//...
})();
Run Code Online (Sandbox Code Playgroud)
这将被解释为:
var fn = function () {
//...
}(function () {
//...
})();
Run Code Online (Sandbox Code Playgroud)
我们最终将第二个函数作为参数传递给第一个函数,然后尝试将第一个函数调用的结果作为函数调用.第二个函数将在运行时因"...不是函数"错误而失败.
小智 16
是的,你应该总是使用分号.为什么?因为如果你最终使用JavaScript压缩器,你的所有代码都会在一行上,这会破坏你的代码.
试试http://www.jslint.com/ ; 它会伤害你的感情,但会告诉你许多方法来编写更好的JavaScript(其中一种方法是始终使用分号).
小智 11
每个人似乎都想念的是JavaScript中的分号不是语句终止符而是语句分隔符.这是一个微妙的差异,但它对解析器的编程方式很重要.像对待他们一样对待他们,你会发现离开他们会感觉更自然.
我已用其他语言编写,其中分号是一个语句分隔符,也是可选的,因为解析器在新行上执行"分号插入",它不会破坏语法.所以当我在JavaScript中找到它时,我并不陌生.
我不喜欢语言中的噪音(这是我对Perl不好的一个原因)而且半冒号是JavaScript中的噪音.所以我省略了它们.
小智 10
我说一致性比保存几个字节更重要.我总是包括分号.
另一方面,我想指出有很多地方分号在语法上是不需要的,即使压缩器正在对所有可用的空格进行核对.例如,在块的结尾.
if (a) { b() }
Run Code Online (Sandbox Code Playgroud)
小智 8
JavaScript会在解释代码时自动插入分号,因此如果将return语句的值放在行下面,则不会返回:
你的代码:
return
5
Run Code Online (Sandbox Code Playgroud)
JavaScript解释:
return;
5;
Run Code Online (Sandbox Code Playgroud)
因此,由于JavaScript的自动分号插入,没有返回任何内容
小智 7
我认为这与上一次播客讨论的内容类似."你接受的是自由主义"意味着必须在Javascript解析器中加入额外的工作来修复分号被遗漏的情况.现在我们有一大堆页面出现错误的语法,当某些浏览器决定对它接受的内容稍微严格一些时,可能会在未来的某一天中断.此类规则也应适用于HTML和CSS.您可以编写损坏的HTML和CSS,但是当某些浏览器无法正确解释您的错误代码时,如果您变得奇怪且难以调试行为,则不会感到惊讶.
归档时间: |
|
查看次数: |
166561 次 |
最近记录: |