javascript - 求问一段js代码的执行过程
ringa_lee
ringa_lee 2017-04-10 17:57:35
[JavaScript讨论组]
var a={n:1}
var b=a;
a.x=a={n:2}
console.log(a)//{n:2}
console.log(a.x)//undefined
console.log(b)//{ n: 1, x: { n: 2 } } 

我的理解:
a先引用了{a:1}对象,
b又引用了a,
a又改变了引用,指向{a:1},
a.x的赋值过程不理解

ringa_lee
ringa_lee

ringa_lee

全部回复(2)
伊谢尔伦

给题主提供另一个思路:
js中‘.’运算符的优先级是要高于‘=’的,所以才会有a = a.x = {n:2}和a.x = a ={n:2}的结果是一致的。
知道了这个大前提就好办了
a.x=a={n:2}
拆开来看:
第一步:对象a增加属性x(注意这里还未赋值,只是单纯声明,由于引用关系b也拥有一个未赋值的x属性)
第二步:对象a改变赋值{n:2}(注意这里a的指向和第一步中是不一样的)
第三步:给第一步中的x赋值{n:2},即b.x = {n:2}

最终:a:{n:2} b:{x:{n:2},n:1}

ringa_lee

a.x=a={n:2} 这是赋值语句,从右开始,相当于让 a 重新指向一个对象,因为这是一个语句,所以前面的a仍然没有被动态改变,仍然指向的是 前一个对象,但是后面出现的 a 却是已经改变指向的,

  1. console.log(a) 这个a就是指向新的对象。
    2.console.log(a.x) 这个 x 属性相当于是前一个对象的属性,但是 a 是已经改变了的,所以没有这个属性。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号