var x=0, y=0;
var z=
x
++
++
y
注释说:
由于不允许在Postfix递增/递减运算符(I / DO)和操作数之间使用LineTerminator(LT),因此在自动分号插入后由[LT]分隔的两个引用之间的两个IO(正如两个DO及其组合)导致语法错误
为什么此代码会导致语法错误?我认为这是一个有效的代码片段。上面的代码等于var z=x; ++ ++ y;
。 javascript语法表达式++ ++ y
为allowed。那有什么问题?
答案 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后缀表达式”。