js魔法需要解释

Js magic need explanation

我正在尝试用 js 解决这个问题:

var a = 1;
console.log(a++ + ++a);

它returns 4 我可以理解它是 1+3 但是它的顺序是什么?

更详细地了解 :

++a 首先递增 a 的值,然后 returns 引用 a 的左值,因此如果使用 a 的值,那么它将是递增的值。

a++先returns一个右值,其值为a,即旧值,然后在下一个完整表达式之前的未指定时间递增a(即"before the semicolon").

后缀增量的优先级高于前缀增量。

这在过去对我帮助很大,对你也应该有帮助..

http://en.cppreference.com/w/cpp/language/operator_incdec

a++表示return递增前的值

++a表示returns递增后的值

所以分解你的例子:

var a = 1;
console.log(a++ + ++a);
  1. a 设置为 1
  2. a++ returns 1,然后a增加到2(但此时我们不对它做任何事情)
  3. ++a 递增 a 和 returns 3
  4. 然后我们总共有 console.log(1 + 3),其中 1 来自第 1 步,3 来自第 3 步。

what is the sequence of this

伪规范语言:

  1. 评估加法 (a++ + ++a)
    1. lval为计算左操作数(a++)的结果
      1. 获取a的值,赋值给oldValue。 (1)
      2. newValueoldValue + 1
      3. newValue 分配给 a。 (a == 2)
      4. ReturnoldValue。 (1)
    2. rval为计算右操作数(++a)的结果
      1. 获取a的值,赋值给oldValue。 (2)
      2. newValueoldValue + 1
      3. newValue 分配给 a。 (a == 3)
      4. ReturnnewValue。 (3)
    3. Returnlval + rval。 (1 + 3)
  2. 结果:4