对于a.x=a={n:1} 的个人理解

1,888 阅读1分钟
第一次给了掘金,没经验,写的不好的地方请理解^-^。
对于 a.x=a={n:1} 这种面试题,个人理解主要考察js两点知识:js中的引用类型和赋值表达式的运算顺序。

完整的题目是这样的:

var a = {n: 1};

var b = a; 

a.x = a = {n: 2};

请输出

 a.x  //undefined

b.x  //{n:2})

个人理解:

1、赋值运算顺序:

由于js中“.”操作符的优先级要高于赋值,所以在执行a.x = a = {n: 2}的时候,首先确定a.x是谁,再给a.x赋值,然后运算a={n:2},最终为再为a.x赋值;

2、引用关系:

a和b指向同一块内存地址,也就是对{n: 1}的引用,即a===b;

 表象是a.x,其实是{n:1}的属性x,由于运算顺序的原因,首先确定a.x其实是{n:1}的属性x,也为b的属性x。a和b还保持着对{n:1}的引用。当运行道a={n:2}的时候,由于a重新的重新赋值,a不在引用{n:1};最后给a.x赋值的时候,其实是为{n:1}的属性x赋值,此时b还对{n:1}保持引用,所以最终输出的时候:

a.x即{n:2}属性x的就等于undefined;

b.x即{n:1}的x就等于a({n:2});

描述不到之处,请指正;

——end——