请问下面js代码,什么是a++的 `后副作用` ?
var a = 42, b;
b = a++;
console.log(a);//43
console.log(b);//42
以及如下js代码
var a = 42, b;
b = a++, a;
a; // 43
b; // 42
js操作符优先级不应该先算a++然赋值给b吗?a逗号隔离了应该还是42啊
谷歌也没找到,请详细解释一下a++的 后副作用
原书的解释,其中a++的 后副作用
是什么鬼???:
等一下!为什么这改变了赋给 b 的值?
因为 , 操作符要比 = 操作符的优先级低。所以, b = a++, a 被翻译为 (b = a++), a 。因为
(如我们前面讲解的) a++ 拥有 后副作用,赋值给 b 的值就是在 ++ 改变 a 之前的值 42 。
重点不是优先级。。。。。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这一段,因为执行了
a++
后 a 已经是 43 了,但是根据逗号操作符
始终将最右边的返回出去,所以这里返回的是再看
是否记得逗号还有个作用:分别赋值。
这是其一,剩下的就是,
a++
和++a
的问题,根据运算, b = a++; 其实是如下。对于
b = (a++, a)
,发生了以下的事:这里面出现的运算符有:
=
、()
、a++
(后置递增)、,
四种,它们的优先级为:但是由于
a++
、,
被()
所包裹,所以b = (a++, a)
的实际运算顺序为:a++
a++, a
b = (a++, a)
按顺序进行求值
a++
,这是一个后置的递增运算符,所以会先返回a
的值然后再对a
的值进行 + 1(所谓的 后副作用);a++, a
就变成了42, 43
;42, 43
这是一个逗号操作符,它会返回最后一个操作数的值(这里是43
),所以把第二步的结果代入,这一次计算会返回43
;b = 43
对于
b = a++, a
,你可以根据运算符优先级那个表自行推导了。你这是 逗号表达式 的问题,另外说下++的区别
a++是先用后加
++a是先加后用