我正试图在js中解决这个魔法:
var a = 1;
console.log(a++ + ++a);
它返回4并且我可以理解它是1 + 3但是它的序列是什么?
答案 0 :(得分:5)
a++
表示在递增之前返回值
++a
表示递增后返回值
所以要打破你的榜样:
var a = 1;
console.log(a++ + ++a);
a
设置为1
a++
返回1,然后a
会增加到2
(但此时我们不会对此做任何事情)++a
递增a
并返回3 console.log(1 + 3)
1
来自第1步,3
来自第3步。答案 1 :(得分:3)
这个
的顺序是什么
用伪规范语言:
a++ + ++a
)
lval
成为评估左操作数(a++
)的结果
a
的值并将其分配给oldValue
。 (1
)newValue
成为oldValue + 1
。newValue
分配给a
。 (a == 2
)oldValue
。 (1
)rval
成为评估右操作数(++a
)的结果
a
的值并将其分配给oldValue
。 (2
)newValue
成为oldValue + 1
。newValue
分配给a
。 (a == 3
)newValue
。 (3
)lval + rval
。 (1 + 3
)4
答案 2 :(得分:1)
详细了解Xufox was saying in the comments section:
++a
首先递增a的值,然后返回引用a的左值,因此如果使用a的值,那么它将是递增的值。
a++
首先返回一个值为a的rvalue,即旧值,然后在下一个完整表达式之前的未指定时间递增a(即“分号前”)。
后缀增量的优先级高于前缀增量。
这对我来说很有帮助,它也应该帮到你..