Javascript and automatic semicolon insertion

后端 未结 3 952
慢半拍i
慢半拍i 2021-01-27 22:54

test262 test suite has test containing source:

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

The annotation says:

Since LineTerminato

相关标签:
3条回答
  • 2021-01-27 23:21

    That evaluates to:

    var x = 0, y = 0;
    var z = x ++ ++ y; //MAKES NO SENSE!
    
    0 讨论(0)
  • 2021-01-27 23:26

    This code will become:

    var z = x;
    ++ ++ y;
    

    The ++ ++ y is the root of the problem. Let’s look at why...

    ++ ++ y gets evaluated as ++(++y). The first step is to evaluate (++y). The ++ operator increments the value referenced by the variable it is next to, and returns the incremented value. The important part here is that it does not return a reference, just a value. So the second step would be ++(1), (or whatever ++y yielded), which is an error, since only references can be incremented.

    0 讨论(0)
  • 2021-01-27 23:36

    The grammar does not allow a new-line to precede a ++ or -- operator; such a new-line must be converted to a ;. Consequently, the expression must be parsed as though it had been:

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

    The third line is illegal.

    References:

    Section 7.9.1, "Rules of Automatic Semicolon Insertion", rule 3

    Section 11.3, "11.3 Postfix Expressions".

    0 讨论(0)
提交回复
热议问题