对于a.x=a={n: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——








转载于:https://juejin.im/post/5a69412d5188257342171399

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值