4

ECMAScript 语言规范指定乘法运算符是可交换的 (A*B==B*A)。但是,如果 A 或 B 包含赋值运算符,则不成立。例如,如果我在浏览器的控制台中键入以下内容:

 var x = 1;
 (x + 2) * ((x = 4) + 1);

给出 15,但是:

 var x = 1;
 ((x = 4) + 1) * (x + 2)

给 30。

或者可交换是否意味着一旦所有变量都被解析为它们的值,它就是可交换的?然而,规范讨论的是“* 运算符”,而不是数学乘法运算。

4

1 回答 1

3

问题是第二个示例中的 x+2 是 6 而不是 3,因为您已经指定 x=4;

之后的意思:

((x = 4) + 1)

发生的事情是

(x + 2) == (4 + 2) == 6

(4+1) * 6 = 30

这是正常行为

于 2014-11-05T12:45:04.673 回答