当我做这样的事情时:
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
它们似乎也按顺序进行了评估,但是有更强的保证会发生这种情况吗?
答案 0 :(得分:1)
这是否适用于所有Javascript实现?
是
标准是按照这种方式定义的吗?
是的,您可以自己阅读https://github.com/pschiffe/ipa-log-config。
具体来说,here指定在右表达式之前计算左表达式。
runtime semantics: evaluation of the addition operator (+
)也是如此。
或者,这是Javascript世界中某种未定义的行为吗?
是的,JavaScript中的evaluation of argument lists,但不是。