Javascript和自动分号插入

时间:2013-01-14 19:15:26

标签: javascript parsing

test262测试套件包含test来源:

var x=0, y=0;
var z=
x
++
++
y

注释说:

  

由于不允许在Postfix递增/递减运算符(I / DO)和操作数之间使用LineTerminator(LT),因此在自动分号插入后由[LT]分隔的两个引用之间的两个IO(正如两个DO及其组合)导致语法错误

为什么此代码会导致语法错误?我认为这是一个有效的代码片段。上面的代码等于var z=x; ++ ++ y;。 javascript语法表达式++ ++ yallowed。那有什么问题?

3 个答案:

答案 0 :(得分:4)

此代码将变为:

var z = x;
++ ++ y;

++ ++ y是问题的根源。让我们来看看为什么......

++ ++ y评估为++(++y)。第一步是评估(++y)++运算符递增它旁边的变量引用的值,并返回递增的值。这里的重要部分是它不返回引用,只返回值。所以第二步是++(1),(或者++y产生的),这是一个错误,因为只有参考可以递增。

答案 1 :(得分:-1)

评估为:

var x = 0, y = 0;
var z = x ++ ++ y; //MAKES NO SENSE!

答案 2 :(得分:-1)

语法不允许在++--运算符之前添加换行符;这样的新行必须转换为;。因此,表达式必须像以前一样进行解析:

var x = 0 , y = 0 ;
var z = x ;
++ ;
++ y ;

第三行是非法的。

参考文献:

  

第7.9.1节“自动分号插入规则”,规则3

     

第11.3节“11.3后缀表达式”。