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