Js魔术需要解释

时间:2016-09-26 19:29:46

标签: javascript post-increment pre-increment

我正试图在js中解决这个魔法:

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

它返回4并且我可以理解它是1 + 3但是它的序列是什么?

3 个答案:

答案 0 :(得分:5)

a++表示在递增之前返回值

++a表示递增后返回值

所以要打破你的榜样:

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

答案 1 :(得分:3)

  

这个

的顺序是什么

用伪规范语言:

  1. 评估加法(a++ + ++a
    1. lval成为评估左操作数(a++)的结果
      1. 获取a的值并将其分配给oldValue。 (1
      2. newValue成为oldValue + 1
      3. newValue分配给a。 (a == 2
      4. 返回oldValue。 (1
    2. rval成为评估右操作数(++a)的结果
      1. 获取a的值并将其分配给oldValue。 (2
      2. newValue成为oldValue + 1
      3. newValue分配给a。 (a == 3
      4. 返回newValue。 (3
    3. 返回lval + rval。 (1 + 3
  2. 结果:4

答案 2 :(得分:1)

详细了解Xufox was saying in the comments section

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

a++首先返回一个值为a的rvalue,即旧值,然后在下一个完整表达式之前的未指定时间递增a(即“分号前”)。

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

这对我来说很有帮助,它也应该帮到你..

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