JavaScript经典题目a.x=a={n:2}

题目

var a ={n:1};
var b = a;
a.x=a={n:2};
console.log(a);
console.log(b);

答案:

在这里插入图片描述

易错点(错误理解)

等号运算符如果从右往左,那么不是应该先a赋值到了新地址,然后a.x追加到a的新地址里吗?
纠正:不是把a.x追加进a的新地址,而是把a的新地址赋值给a.x,而a.x是存放在a原地址中的,因为a.x的.操作符优先于=被执行

分析(正确理解)

  1. 首先对a开辟一块内存空间,然后存入{n:1},然后对b赋值a的地址,此时a和b指向同一块地址
  2. .运算符优先于 = 号运算符,此时先执行.操作,即在a的地址内放入x属性(此处不同人有不同理解,我暂时理解为属性名不是变量,没有开辟新的空间)
  3. 此时才进行赋值运算,赋值从右往左,一次赋值,即把{n:2}赋值给a及a.x,此时a指向新地址{n:2},而a.x也指向新地址{n:2}
  4. 也就是a.x被追加到了原地址a,即b,a指向新地址

画图辅助理解.

在这里插入图片描述
追加:
在这里插入图片描述
对新地址a内存的数据进行改变时,a.x也会发生对应改变
注:题目来源公开课面试题

发布了29 篇原创文章 · 获赞 8 · 访问量 1129

猜你喜欢

转载自blog.csdn.net/weixin_44523860/article/details/103465771
今日推荐