let a = {n: 1};
let b = a;
a.x = a = { n: 2 }
console.log(a.x) -> undefined
console.log(b, b.x)
请问打印分别为多少?
公布答案
console.log(a.x) -> undefined,因为a指向AAAFFF111地址,里面没有x属性,所以输出undefined
console.log(b) ->
{
"n": 1,
"x": {
"n": 2
}
}
那请问为什么是这样的结果呢
请看图
分析如下
-
创建一个全局变量 a, 因为a是一个object,从而开辟一个堆内存 heap 假设地址为AAAFFF000 里面包含n:1
-
let b=a,将a赋值给b,也就是将b也指向a的地址
-
a.x =a ={n:2} 首先开辟堆内存 假设地址AAAFFF111 ,包含n:2, 带成员访问的要优先处理,a.x = a; a={n:2}, 就是设置a里面对象新属性x ,然后修改a对象地址,从而VO全局变量a指向 AAAFFF111 ,再将a赋值给a.x ,即将a.x的值指向新的a地址
结论: 那么第一个 a.x中输入 undefined,因为a指向AAAFFF111地址,里面没有x属性,所以输出undefined,
输出b,b指向AAAFFF000地址,包含n:1,x指向AAAFFF111,所以输出上述结果
个人拙见