var a = {n: 1}
var 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 = (????),此时因为还没有生成{n: 2},所以这个a.x,是在老地址里面声明的x变量,
第二步,执行 (????)里面的内容,也就是 a = {n: 2},在这里a指向了新地址{n: 2}
第三步,也就是执行从左到右数的第一个=,那么就是(老地址.x) = a的新地址
老地址因为被b引用,无法被销毁,所以b.x 就是a的新地址,
所以 b.x 就是{n : 2},那么a.x此时因为a指向了新地址,新地址里面没有声明变量x,所以a.x 是undefined
网友评论