js内存空间问题
1 let a = { n: 1 }; 2 const b = a; 3 a.x = a = { n: 2 }; 4 console.log('a.x:', a.x); // undefined 5 console.log('b.x:', b.x); // {n:2}
在b=a时,堆栈中引用的是同一个对象地址。可以简易理解为,a、b只为两个指针,共同指向一个堆内存中的对象【{ n: 1 }】。
而在 a.x = a = { n: 2 } 这一步,点运算高于等号。可以简易理解为先修改堆内存中的对象【{ n: 1 }】为【{ n: 1,x: { a = { n: 2 } }】:新建了一个内存空间存储【{n:2}】, 并且使得【{ n: 1 }】.x 和 a指向它。
此时 b.x 和 a指向同一个堆内存地址,即: