var a = {
n: 1};
// 干了什么,开辟了一个空间生成了一个对象, a是生成对象的索引
// 这个a可以叫为prevA的索引{n:1}
console.log(a) //{ n: 1 }
// a.x是一个表达式计算,获取a.x的计算结果,缓存,等待后面的计算
a.x = a = {
n: 2 } // 这个a可以叫做nextA的索引,存的值是{n: 2}
console.log(a.x) // undefined a.x 去获取{n: 2}上的不存在属性可不就是等于undefined
console.log(a) // { n: 2 }
理解:
a.x是一个表达式计算,获取a.x的计算结果,缓存,等待着后面的计算
后面计算完之后其实事对前面的a进行了重新赋值
验证:
var a = {
n: 1, x:9};
console.log(a) // { n: 1, x: 9 }
a.x = a = {
n: 2 }
console.log(a.x) // undefined
console.log(a) // { n: 2 }
var a = {
n: 1, x:9};
console.log(a) //{ n: 1 }
let b ={
};
b.x = a = {
n: 2 }
console.log(a.x) // undefined
console.log(a) // { n: 2 }
console.log(b) // { x: { n: 2 } }