在javascript中a+++a与a+a++的区别

对于如下代码,结果是多少?

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

参考资料来源于饥人谷课后习题资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Java byte code 的学习意义 为啥要学java bytecode,这就跟你问我已经会python了为...
    shanggl阅读 1,747评论 0 3
  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 9,092评论 0 13
  • 有些人说 爱是一次旅行 有的人说 爱只是一次生活中的游戏 我说 爱是我一个人的事 无关其它
    托尼gay阅读 392评论 0 0
  • 我 打死你。
    言语道断阅读 242评论 0 0
  • 看着外边的天空一点睡意都没有!可是眼睛和身体都想好好的休息。人有的时候就是个自我的矛盾,在这个绚丽多彩的世界里想要...
    笑看千秋阅读 216评论 0 0