可能重复:
What are the rules for Javascript's automatic semicolon insertion?
我知道你可以在不同的行上链接js(或jquery),如下所示:
$('div')
.filter(':first').hide().end()
.find('span').css('opacity', .5)
...;
发动机没有用分号打破它。另一方面,如果我这样做:
return
i ? 1 : 2
它输入分号并始终返回undefined。什么时候做什么准则?
答案 0 :(得分:2)
编辑:看起来Javascript在新线路上添加了分号,只要它有意义。如果第二行以“。”开头,那么您的第一个示例将不是有效的javascript。所以它假设它是一行,而在你的第二个例子中,每一行都可能是有效的js。例如:
return
1 + 2;
返回undefined,同时返回:
return 1 +
2;
和
return 1
+ 2;
返回3,因为至少有一行不能生成有效的js。
答案 1 :(得分:1)
http://inimino.org/~inimino/blog/javascript_semicolons有一个很好的解释。引用它:
3。当遇到“限制生产”并且在语法包含注释“[此处没有LineTerminator]”的地方包含行终止符时,则插入分号。
[...]
受限制的制作是断行不能出现在特定位置的制作,因此如果出现换行符,它将阻止程序以这种方式解析,尽管它仍然可以用另一种方式解析。
语法中有五个限制生成,它们是后缀运算符
++
和--
,continue语句,break语句,return语句和throw语句。[...]
请注意,return语句可以包含表达式中的换行符,而不是
return
标记和表达式开头之间的换行符。
换句话说,return ...
是一个特定的构造,其中,如果你在return
之后放置一个换行符,JavaScript将插入一个分号。还有其他几种这样的结构;但除了这些之外,如果没有方法可以理解你的代码,JavaScript只会插入一个分号。
答案 2 :(得分:0)
答案 3 :(得分:0)
这更好地描述为结束语句解析而不是插入分号。在JS中,分号纯粹是装饰性的。
解析器在具有完整语句时停止。返回的行为正是您应该期望的,因为没有参数的返回是一个合法的陈述。如果你不小心这似乎是唯一可能让你陷入麻烦的情况,因为JS无法读懂你的想法。
将return参数放在一个单独的行上即使解析正确也是病态的。