为了账号安全,请及时绑定邮箱和手机立即绑定

JS中一个赋值的问题

JS中一个赋值的问题

哆啦的时光机 2018-11-13 13:14:17
javascript中的赋值我们都知道,是从右至左的var a = b = c上面的语句实际执行时是这样的b = c var a = b但是如果有对象参与进来呢?昨天看到的一个例子var foo = { a: 2 } var bar = foo  foo.x = foo = { b:  3 }前两行很简单,就是将bar也指向了foo。第三行,刚开始是执行foo = { b: 3 },这样将foo重新指向了另一个对象。接下来的一句foo.x = foo,这句我本来以为是foo.x指向foo,这样foo就成了一个循环引用自身的对象,即foo = {    b: 3,    x: {        b: 3,        x: {            b: 3,            x: {                ......            }        }    }}但是实际测试发现,foo.x = foo这句里面的foo.x中的foo是指向bar,也就是还没重新赋值的foo,有点不太理解,感觉应该是解析时候是从左到右,但是实际执行会是从右到左这样?
查看完整描述

1 回答

?
眼眸繁星

TA贡献1873条经验 获得超9个赞

这个我刚刚看到了一个大神的讲解挺好的(正在查资料核对),对象的连等赋值,大概解释是这样的:foo.x = foo = { b: 3 },在解释器执行中先看foo.x 和foo是否已经创建如果未创建就创建它并且将他们都指向最右边的对象,明显foo创建了并且指向{ a: 2 },foo.x还未创建,于是创建它并且让它指向null,此时bar和foo都指向{a:2,x:null},再将他们都指向右边的对象{b:3},此时bar指向{a:2,x:{b:3}},foo指向{b:3};


查看完整回答
反对 回复 2018-12-14
  • 1 回答
  • 0 关注
  • 450 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信