alm*_*now 5 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
它们似乎也按顺序进行了评估,但有更强的保证,这应该始终发生吗?
这对于所有 Javascript 实现来说都是正确的吗?
是的。
标准是这样定义的吗?
是的,您可以在这里自己阅读。
具体来说,运行时语义:加法运算符 ( +)的求值指定左表达式在右表达式之前求值。
对于参数列表的评估也是如此。
或者,这是 Javascript 世界中某种未定义的行为吗?
是的,JavaScript 中有未定义的行为,但这里没有。
| 归档时间: | 
 | 
| 查看次数: | 74 次 | 
| 最近记录: |