为什么这个脚本会增加y并且不会给出我预期的语法错误?

时间:2014-01-18 18:33:59

标签: javascript

今天我偶然发现了这个javascript片段。

var x = 5, y = 6;
x
++
y
alert (x + " " + y);

我想知道为什么这不会引发语法错误,更多为什么y最后为7? 如果有任何奇怪的片段有什么用?

JSFiddle here

2 个答案:

答案 0 :(得分:7)

这是由于自动分号插入所致。在JavaScript中,分号不是可选的。它们通过让运行时为您添加它们来模拟可选项。

解析器只能在这方面做得很好。基本算法是“如果该行是一个有效的语句,那么在它之后输入一个分号并执行它,如果不是,则继续下一行”

解析器将该代码转换为:

var x = 5, y = 6;
x;
++
y;
alert (x + " " + y);

现在流行的是分散冒号,但我仍然认为在JS编写多年后,这是一个坏主意。

答案 1 :(得分:6)

我认为,原因是Javascript的Automatic Semicolon Insertion(ASI)。 代码解释如下:

var x = 5, y = 6;
x;
++y;
alert (x + " " + y);