2016-09-26 47 views
-2

我试图解决这个神奇的JS:的js魔术需要解释

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

它返回4,我可以理解,这是1 + 3,但这个又是什么顺序?

+4

如果你了解后增和预增运营商做的,它变得很明显。您只需要阅读文档以及代码从左到右执行的知识。 – Xufox

+0

我确实看起来并不明显。你能把它描述为1)... 2)... 3)...在你的答案中? –

+2

@Jonasw'2 + 2'与那个有什么关系? – Xufox

回答

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

进入一个稍微详细什么Xufox was saying in the comments section

++a第一增量的值,然后返回一个左值指的是,如果使用的值那么这将是增加值。

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

后缀增量优先于前缀增量。

这对我帮助很大早在一天,它会帮助你太..

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

3

这个是什么

序列中的伪规范语言:

  1. 评估除了(a++ + ++a
    1. lval是评估左操作的结果(a++
      1. 获取a的值并将其分配给oldValue。 (1
      2. newValueoldValue + 1
      3. newValue分配到a。(a == 2
      4. 返回oldValue。 (1
    2. rval是评估右操作数(++a
      1. 获取的a值,并将其分配给oldValue的结果。 (2
      2. newValueoldValue + 1
      3. newValue分配到a。 (a == 3
      4. 返回newValue。 (3
    3. 返回lval + rval。 (1 + 3
  2. 结果:4