let a = {n: 1}
let b = a;
a.x = a = {n: 2}
console.log(a.x);
console.log(b.x);
第二个输出结果b.x我能理解,因为a和b是同一个引用,
但是一个的输出结果实在想不明白,求大神帮忙分析下
let a = {n: 1}
let b = a;
a.x = a = {n: 2}
console.log(a.x);
console.log(b.x);
第二个输出结果b.x我能理解,因为a和b是同一个引用,
但是一个的输出结果实在想不明白,求大神帮忙分析下
a=5是一个表达式,会返回一个值
> a=5
< 5
所以 b=a=5 是从右向左依次赋值的。
那么 a.x = a = {n: 2}
相当于
a = {n:2} // -> a : {n:2}
a.x = a // -> a : {n:2,x:{n:2}}
大概这个意思吧
let a = {n: 1} //地址一
let b = a; // 引用 地址一
a.x = a = {n: 2} //将这一步拆开的执行顺序
-- a = {n: 2} //此时的a为地址二
-- a.x = a // 即{n: 2}; 连等时此a还是引用的地址一
console.log(a.x); //a的值在连等时已经变成了地址二
console.log(b.x); //b还是地址一
//总结起来就是此a非彼a
8 回答4.6k 阅读✓ 已解决
6 回答3.3k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
5 回答6.3k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
5 回答1.2k 阅读✓ 已解决
4 回答2.7k 阅读✓ 已解决
https://segmentfault.com/a/11...