Javascript中操作的执行顺序是否保证始终相同?

Javascript中操作的执行顺序是否保证始终相同?,javascript,language-lawyer,Javascript,Language Lawyer,当我这样做的时候: var x = 5; console.log( x + (x += 10) ); //(B) LOGS 10, X == 20 console.log( (x += 10) + x ); //(A) LOGS 0, X == 30 (A)和(B)之间返回值的差异由计算时的x值解释。我想在后台应该会发生这样的事情: TIME ----> (A) (x = 5) + (x += 10 = 15) =

当我这样做的时候:

var x = 5;
console.log(         x  + (x += 10)  );  //(B) LOGS 10, X == 20
console.log(  (x += 10) +  x         );  //(A) LOGS  0, X == 30
(A)和(B)之间返回值的差异由计算时的
x
值解释。我想在后台应该会发生这样的事情:

     TIME ---->
(A)         (x = 5) + (x += 10 = 15) = 20
(B) (x += 10 == 15) + (x == 15)      = 30
但只有当且仅当
x
的计算顺序与写入顺序相同时,这一点才成立

我有几个问题要问

这是否保证所有Javascript实现都是正确的

标准是否定义为这种方式

或者,这是Javascript世界中某种未定义的行为吗

最后,同样的想法也可以应用于函数调用

var x = 5;
console.log(x += 5, x += 5, x += 5, x += 5); // LOGS 10, 15, 20, 25
它们似乎也按顺序进行了评估,但是否有更有力的保证可以确保这种情况始终发生

对于所有的Javascript实现,这保证是真的吗

标准是否定义为这种方式

是的,你可以自己读

具体而言,指定在计算右表达式之前先计算左表达式

这对我来说是一样的

或者,这是Javascript世界中某种未定义的行为吗

是的,用JavaScript,但不是这里

对于所有的Javascript实现,这保证是真的吗

标准是否定义为这种方式

是的,你可以自己读

具体而言,指定在计算右表达式之前先计算左表达式

这对我来说是一样的

或者,这是Javascript世界中某种未定义的行为吗


是的,在JavaScript中,但这里没有。

这有帮助吗,或者您的问题只是专门询问操作员的执行顺序?我特别询问的是保证/可预测的执行顺序。但这是一个很好的资源,我不知道这些事情。谢谢。我相信这会解决所有的问题。谢谢霍根。按照那篇文章中的语法,我想知道,当要计算
(a OP b)
时,我是否可以依赖
a
中的值,该值在
b
之前被计算/读取。这是否有帮助,或者您的问题只是专门询问操作员的执行顺序?我特别询问的是保证/可预测的执行顺序。但这是一个很好的资源,我不知道这些事情。谢谢。我相信这会解决所有的问题。谢谢霍根。按照那篇文章的语法,我试图知道,当要计算
(a OP b)
时,我是否可以依赖
a
中在
b
之前被计算/读取的值。