js内存空间问题

人恒过 / 2023-09-01 / 原文

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指向同一个堆内存地址,即: