let a = { n: 1 }; let b = a; a.x = a = { n: 2 } js基础知识

232 阅读1分钟
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
            }
        }
       

那请问为什么是这样的结果呢

请看图

image.png

分析如下

  • 创建一个全局变量 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,所以输出上述结果

    个人拙见