对于如下代码,结果是多少?
let a = 1
console.log( a+++a )
对于下面代码,结果又是多少?
let a = 1
console.log( a+a++ )
经过测试发现,第一个代码输出结果为3,第二个代码输出结果为2,发现一个问题a+++a
等同于(a++)+a
,而 a+a++
等同于a+(a++)
,二者结果为什么不一样?
首先,a++
的含义是一个表达式(一个结果),这个结果是a的值,之后a自增1。
a+(a++)
编译器处理过程
【1】push(a),a入栈(1)。此时没到下一步,并未自增
【2】push(a++),a++入栈(1),之后a自增1。a++为a的值,即为1,a自增1为2,但是上一步a已经入栈为1
【3】result = pop()+pop(), 出栈两个操作数(1,1)相加,得到2由上面两步得a为1,a++也为1,a+(a++)结果为2
(a++)+a
编译器处理过程
【1】push(a++),a++入栈(1),之后a自增1。a++为a的值,即为1,a自增1为2,此时的a并未入栈
【2】push(a),a入栈(2)在上一步中,a已经自增为2,所以现在入栈的值是2
【3】result = pop()+pop(), 出栈两个操作数(1,2)相加,得到3由上面两步得,a++为1,a为2,(a++)+a结果为3
参考资料来源于饥人谷课后习题资料