var a = { n:1 };
var b = a;
a.x = a = { n:2 };//我刚开始含糊x属性在哪个堆中
console.log(a.x); // undefined
console.log(b.x); // { n:2 }
这一题确实有点绕,首先js对象的赋值是将对象在堆中的地址赋值给栈里的变量
第一行第二行表明ab两个变量都指向了{ n:1 }对象
第三行 我是这么理解的: js的赋值是从右向左,但是代码还是从左到右加载的,因而a.x先在{ n:1 }堆中创建了x属性(很重要),紧接着代码开始从右向左开始赋值,先是a指向了{ n:2 }堆空间,同时让x属性也指向了{ n:2 }堆空间,而此时b仍然指向{ n:1 },所以a访问不到x属性,b.x = { n: 2}
最后欢迎各位大佬批评指正