对于下面的代码,结果是多少?
let a = 1
console.log ( a+++a )
先分析a+++a,因为a++的优先级比++a和+的优先级都要高,所以优先计算a++,得到的结果是2,再计算2+a得出结果是2+1=3,所以a+++a的计算过程是(a++)+a=2+1=3
+
/ \
/ \
a++ a
编译器的处理过程:
- push(a++), 即push(1),之后 a自增变成2
- push(a),即push(2)
- result = pop()+pop(), 出栈两个操作数(1,2)相加,得到3
对于下面的代码,结果又是多少?
let a = 1;
console.log(a+a++)
还是首先比较优先级,a++的优先级比+的优先级要高,所以先计算a++的值,a+a++ 相当于a+(a++)=1+1=2
+
/ \
/ \
a a++
编译器的处理过程:
- push(a), a入栈(1)
- push(a++),即push(1),之后 a自增变成2
- result = pop()+pop(), 出栈两个操作数(1,1)相加,得到2