我可以理解后缀/前缀自增/自减运算符的作用。在Javascript中,这似乎没有什么不同。
虽然我可以轻松猜测出这行代码的结果:
虽然我可以轻松猜测出这行代码的结果:
var foo = 10; console.log(foo, ++foo, foo, foo++, foo);
// output: 10 11 11 11 12
当++
运算符出现在不同的表达式中时,它很容易理解。
但当这些运算符出现在同一表达式中时,情况会变得有些复杂:
var foo = 10; console.log(foo, ++foo + foo++, foo);
// output[1]: 10 22 12
// Nothing unexpected assuming LTR evaluation
var foo = 10; console.log(foo, foo++ + ++foo, foo);
// output[2]: 10 22 12
// What? Ordering is now different but we have the same output.
// Maybe value of foo is evaluated lazily...
var foo = 10; console.log(foo, foo + ++foo, foo);
// output[3]: 10 21 11
// What?! So first 'foo' is evaluated before the increment?
我的问题是,JavaScript(在这种情况下是V8,因为我在Chrome中测试了这些)如何以不同的方式评估第2个和第3个示例中的加法表达式?
为什么foo
的计算结果与foo++
不同。后缀++
不应该在表达式之后递增并且只评估为表达式中的foo
吗?
left_expression + right_expression
中的左表达式首先被评估。我相信增量运算符的行为符合您的期望。 - Frank Bryce