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").
后缀增量的优先级高于前缀增量。
这在过去对我帮助很大,对你也应该有帮助..
a++
表示return递增前的值
++a
表示returns递增后的值
所以分解你的例子:
var a = 1;
console.log(a++ + ++a);
a
设置为 1
a++
returns 1,然后a
增加到2
(但此时我们不对它做任何事情)
++a
递增 a
和 returns 3
- 然后我们总共有
console.log(1 + 3)
,其中 1
来自第 1 步,3
来自第 3 步。
what is the sequence of this
伪规范语言:
- 评估加法 (
a++ + ++a
)
- 设
lval
为计算左操作数(a++
)的结果
- 获取
a
的值,赋值给oldValue
。 (1
)
- 设
newValue
为oldValue + 1
。
- 将
newValue
分配给 a
。 (a == 2
)
- Return
oldValue
。 (1
)
- 设
rval
为计算右操作数(++a
)的结果
- 获取
a
的值,赋值给oldValue
。 (2
)
- 设
newValue
为oldValue + 1
。
- 将
newValue
分配给 a
。 (a == 3
)
- Return
newValue
。 (3
)
- Return
lval + rval
。 (1 + 3
)
- 结果:
4
我正在尝试用 js 解决这个问题:
var a = 1;
console.log(a++ + ++a);
它returns 4 我可以理解它是 1+3 但是它的顺序是什么?
更详细地了解
++a
首先递增 a 的值,然后 returns 引用 a 的左值,因此如果使用 a 的值,那么它将是递增的值。
a++
先returns一个右值,其值为a,即旧值,然后在下一个完整表达式之前的未指定时间递增a(即"before the semicolon").
后缀增量的优先级高于前缀增量。
这在过去对我帮助很大,对你也应该有帮助..
a++
表示return递增前的值
++a
表示returns递增后的值
所以分解你的例子:
var a = 1;
console.log(a++ + ++a);
a
设置为1
a++
returns 1,然后a
增加到2
(但此时我们不对它做任何事情)++a
递增a
和 returns 3- 然后我们总共有
console.log(1 + 3)
,其中1
来自第 1 步,3
来自第 3 步。
what is the sequence of this
伪规范语言:
- 评估加法 (
a++ + ++a
)- 设
lval
为计算左操作数(a++
)的结果- 获取
a
的值,赋值给oldValue
。 (1
) - 设
newValue
为oldValue + 1
。 - 将
newValue
分配给a
。 (a == 2
) - Return
oldValue
。 (1
)
- 获取
- 设
rval
为计算右操作数(++a
)的结果- 获取
a
的值,赋值给oldValue
。 (2
) - 设
newValue
为oldValue + 1
。 - 将
newValue
分配给a
。 (a == 3
) - Return
newValue
。 (3
)
- 获取
- Return
lval + rval
。 (1 + 3
)
- 设
- 结果:
4