
获得徽章 14
- let a = {n: 1};
let b = a;
a.x = a = {n: 2};
console.log(a.x); //undefined
console.log(b.x); //{n: 2}
值得注意的是a.x = a = {n: 2}这个表达式,由于.的运算符优先级高于=的赋值运算符,所以表达式中会先计算a.x,得出a.x的值是undefined,此时b为
{n: 1, x: undefined};然后表达式执行赋值运算(从右向左),a指向了另一个堆内存空间{n: 2},b的指向仍然是原来的堆内存空间,此时执行最后一个赋值运算时实际上是b.x(上面已经讲了a的指向已经变化了),所以最后得出b为{n: 1, x: {n: 2}}展开58