js中连等的执行顺序:a.x = a = {n: 2}
程序员文章站
2024-03-17 21:26:04
...
新的一天从一道查漏补缺题开始:
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=
访问变量栈内存里面这个变量名,所以进行赋值操作并不会影响前者,因为解析这个语句时一次性全部读取再进行赋值,而不是进行分段读取赋值的。所以就解释了与顺序无关,所有的属性都将会被赋值到最右的值。
参考:
是从这位作者这里看到的噢,只是做一个转存:JavaScript连续赋值的执行顺序问题