关于运算符跟表达式副作用

    var a = 1, c;
    
    c = (a++) + a;
    console.log(c); // 3
问题来了,先执行a++,那a不就等于2了么

最后应该是 c = (2) + 2,结果应该是4才对啊,为什么最后会是3

++不是有个隐式赋值么,为什么这里的a不会受到副作用影响?
阅读 1.8k
2 个回答

a++是先返回值在进行本身运算的
++a是先进行本身运算在返回值的

所以这个表达式(a++) + a; 运算逻辑为: 先返回(a++)的值为 a等于 1,然后在进行 ++运算这时a=2所以c=3;

如果你的表达式为(++a) + a;那么结果就为4

c = (a++) + a is equivalent to the following:

var t1 = a;
a++;
var t2 = a;
c = t1 + t2;

In which t1 is 1 and t2 is 2, which is leading to the result 3.

And if you write the code like c = (++a) + a, it will be interpreted as the following:

a++; // or more precisely, ++a
var t1 = a;
var t2 = a;
c = t1 + t2;

And you will get 4;

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题