js赋值顺序

2022-02-17  本文已影响0人  王善良_
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

上一篇下一篇

猜你喜欢

热点阅读