三目运算符(通过三元运算符,进一步了解返回值与赋值的顺序)
最近刚入门前端的朋友问了我这样一个问题,挺有趣,和刚接触JS的朋友分享一下,希望能有帮助:
var a = 1;
var b = a -= 0 ? a += 1 : a += 2;
console.log(b);
应该有不少新朋友认为b的值为什么不是0? a += 2 返回值是3,a-=3,不就是3 -= 3,不就是等于0, b = 0了吗?
欧,那一定是你对于返回值与赋值的顺序没有了解清楚: 先返回值然后再赋值!
比如我在这里:
var a;
var b;
b = a = 8;那我们这行的执行顺序一定是先将a = 8 的值返回给b,然后再对a赋值!
理解了上面这段,你再看一下刚开始的三目运算是不是就不认为结果还是0了?
来我们看一下:
首先0,肯定会执行 a += 2;这个我就不多赘述了.
然后我们将 a += 2的值返回给了前面的0(在这一步a = 3;但是a的值并没有赋给前面的a,所以在a -= 中的a还是1),
这样b的值为什么是-2,就理解了吧( b = 1-3;) 一直到这一步结束,才开始进行赋值!
这时a才会被赋值. 在这个运算中a被赋值两次,一次是3(a += 2 的值),一次是-2(a -= 3的值),这时a会被后运算的赋值,即最终a = -2;