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

时间:2012-12-13 16:23:25

标签: javascript operators variable-assignment execution order-of-execution

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

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

var x = 1;
console.log(x++); // 1 (?!)
console.log(x);   // 2

...而

var x = 1;
console.log(++x); // 2 (what I would've expected)
console.log(x);   // 2

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

4 个答案:

答案 0 :(得分:5)

这是两件不同的事情

x++

后增量。它在更改之前返回x,但随后更改它:

tmp = x;
x = x+1;
return tmp;

,而

++x

预增量。它首先更改x并在之后返回新值:

x = x+1;
return x;

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

答案 1 :(得分:2)

x++获取值,然后递增它。

++x递增值,然后得到它。

这是我使用的支持这些运算符的每种语言中的行为。

答案 2 :(得分:1)

使用++ AFTER变量在该行代码后增加值。

同样,使用++之前,变量会在该代码行中使用之前递增该值。

酷吧?

var x = 1;
x++;
console.log(x++); // 2 (?!)
console.log(x);   // 3
console.log(++x); // 4
console.log(x++); // 4
console.log(x);   // 5

答案 3 :(得分:1)

你在谈论 pre - post - increment operators之间的区别。在前面的情况下,操作基本上是(x = x + 1; yield x),而在第二种情况下,它是(yield x; x = x + 1)