孟欣 - js赋值顺序/var a = {n: 1} var b = a; a.x = a = {n: 2} console.log(a.x); console.log(b.x)

赋值顺序
以下为网上一个非常经典的面试题:

var a = {n: 1}  
var b = a;  
a.x = a = {n: 2}  
console.log(a.x);  
console.log(b.x) 
OK我们来解答一下

第一个知识点:

b = a 是浅拷贝,所以在堆栈中引用的是一个对象地址。

第二个知识点:

var a=1,b=2,c=3;

a = b = c;

输出的a,b,c结果都为3。  因为赋值运算从右向左执行。

而我们这道题 a.x = a = {n: 2} 

. 的运算优先级大于赋值运算的优先级。 

所以先计算

再计算

所以截止到现在

a的输出值:{ n:2 };

b的输出值:{ n:1 , x={n:2} }

OK, 看明白了我们随便改动来练习一下:

所以截止到现在

a,b的输出都是一个值:{n={n:2}, f={n:2}}

我们来验证一下:


————————————————
版权声明:本文为CSDN博主「孟欣的博客」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/mx18519142864/article/details/83111207

发布了224 篇原创文章 · 获赞 74 · 访问量 40万+

猜你喜欢

转载自blog.csdn.net/qq_34629352/article/details/104012122
今日推荐