如果放在操作数之后,++运算符返回原始值 - 如何?

Bar*_*ney 0 javascript operators execution variable-assignment order-of-execution

据我所知,x++基本上是一种说法x = x + 1.到目前为止,这么清楚.在前端Javascript中,我偶尔会看到++x- 我似乎记得从jsPerf测试中我再也找不到了(一个Google如何++有效?)这在某个特定版本的IE中以某种方式获得了小的性能优势,并让它去那.

但是我最近遇到了一些在执行顺序(JS代码)中出现奇怪怪癖的东西:

var x = 1;
console.log(x++); // 1 (?!)
console.log(x);   // 2
Run Code Online (Sandbox Code Playgroud)

...而

var x = 1;
console.log(++x); // 2 (what I would've expected)
console.log(x);   // 2
Run Code Online (Sandbox Code Playgroud)

我无法理解这一点.当操作和赋值在括号内时,我们如何返回未修改的变量,因此在console.log调用之前应该执行所有权限,更不用说执行和返回了?

Nil*_*ner 5

这是两件不同的事情

x++
Run Code Online (Sandbox Code Playgroud)

是一个后增量.它x在更改之前返回但随后更改它:

tmp = x;
x = x+1;
return tmp;
Run Code Online (Sandbox Code Playgroud)

++x
Run Code Online (Sandbox Code Playgroud)

是一个预增量.它首先更改x并在之后返回新值:

x = x+1;
return x;
Run Code Online (Sandbox Code Playgroud)

第二个也稍快,因为你的编译器/解释器不需要创建临时变量并复制数据.

  • *第二个也稍快,因为您的编译器/解释器不需要创建临时变量并复制数据.*[不一定](http://stackoverflow.com/a/24887/418413) (2认同)