我们先说一下结论
- 后缀自增法(a++): 先进行表达式运算,再进行自增运算。
- 前缀自增法(++a): 先进行自增运算,再进行表达式运算。
我们举三个例子,第二个例子和第三个例子容易混淆,需要留意一下
例子1:
let a = 1
let b = a++
b // 1
a // 2
这里a++会先进行表达式运算,也就是先进行let b = a
,然后进行a = a + 1
例子2:
function fn(num) {
console.log(num)
}
let a = 1
fn(a++) // 1
a // 2
和第一个例子是一个道理,就不赘述了。
我们再来看容易和例子3混淆的例子:
function fn(num) {
console.log(num)
}
let a = 1
fn(a = a + 1) // 2
a // 2
可以见得,a++
和a = a + 1
是等价的吗?显然不是。
++a的话我目前没遇到什么坑,如果有遇到过++a坑的朋友可以评论区留言。,我们就快速在用++a过一下上面的例子。
let a = 1
let b = ++a
b // 2
a // 2
function fn(num) {
console.log(num)
}
let a = 1
fn(++a) // 2
a // 2
function fn(num) {
console.log(num)
}
let a = 1
fn(a = a + 1) // 2
a // 2
————————————————————————
2022-8-28
————————————————————————
今天看博客看到了这样一个例子:
let a = 1, b
b = (a ++) + a // ?
其实关于a++或是++a,MDN上都有详细的解析自增 (++)。
我们直接把原文里的话拿过来:
- 如使用后置(Postfix)自增,操作符在操作数后(例如 x++), 操作数会加一,然后返回加一之前的值。
- 如使用前置(Prefix)自增,操作符在操作数前(例如 ++x), 操作数会加一,然后返回加一之后的值。
所以我们把a++
看成是c
,因为x++
会返回加一之前的值,所以c是1,而对于(a ++)+ a
里面的+a
,此时因为前面的a++
,a已经变成了2,所以结果b是3