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

时间:2016-02-13 16:27:55

标签: 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) = 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

它们似乎也按顺序进行了评估,但是有更强的保证会发生这种情况吗?

1 个答案:

答案 0 :(得分:1)

  

这是否适用于所有Javascript实现?

  

标准是按照这种方式定义的吗?

是的,您可以自己阅读https://github.com/pschiffe/ipa-log-config

具体来说,here指定在右表达式之前计算左表达式。

runtime semantics: evaluation of the addition operator (+)也是如此。

  

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

是的,JavaScript中的evaluation of argument lists,但不是。