做一些JavaScript学习和玩弄语法.在JavaScript中,分号是可选的.建议使用它们,但在某些情况下,规范似乎并未强加它们.特别是据说当没有歧义时,无论你是否使用它们都没有区别.
我找到了这个例子(我用谷歌搜索的一个练习),但没有解释.我认为分号在这里不应该有所作为,但确实如此.我不认为这里有歧义,为什么它应该是不同的.我试着玩一些例子,它看起来真的不一样.不能包围我的头:-(
var y = x + f
(a+b).toString()
Run Code Online (Sandbox Code Playgroud)
和
var y = x + f;
(a+b).toString();
Run Code Online (Sandbox Code Playgroud)
如果一些古茹能够阐明这一点,那将会很酷.
ECMAScript标准规范在11.9.1节中提到了自动分号插入的规则,而我们需要阅读的第二条规则是:
当从左到右解析脚本或模块时,会遇到令牌输入流的末尾,并且解析器无法将输入令牌流解析为单个完整的ECMAScript脚本或模块,然后会自动插入分号在输入流的末尾.强调我的
我们去了.在过度简化的外行语言中,如果解析的延续不能给我们有效的代码,则插入分号.
在您的情况下,如果我们继续解析代码,我们会得到有效的ECMAScript代码,如下所示:(因为JavaScript不是对空白区域敏感的)
var y = x + f(a+b)...
Run Code Online (Sandbox Code Playgroud)
因此,不会插入分号.
第三条规则(如return和yield关键字用法)中描述了对此的例外情况,但它们不适用于您的代码.