您的位置:首页 > 职场人生

关于百度开源面试题

2017-06-26 00:00 211 查看
var foo = {n: 1};

var bar = foo;

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

foo,bar,foo.x 当前值分别是多少?

结果:

foo={n:2}

bar={n:1,x:{n:2}}

foo.x=undefined

这道题看似很难,其实也很好理解,我刚开始不了解js引擎运算连等赋值表达式的过程,所以很容易跑偏,后来看到网上大神的博客,对这里讲解的特别清楚,大家也可以直接去这个地址了解一下:

由ES规范学JavaScript(二):深入理解“连等赋值”问题

那么JS引擎是怎样计算一般的赋值表达式 A = B的呢?简单地说,按如下步骤:

计算表达式A,得到一个引用refA;

计算表达式B,得到一个值valueB;

将valueB赋给refA指向的名称绑定;

返回valueB。

理解了上面这段话,首先我们来解析一下这个语句:foo.x = foo = {n:2}

很容易得到 foo.x = (foo = {n:2});

我们把两边分别进行运算,得出 {n:1}.x = {n:2};

这样结果就很明显了,

也就是说运算foo.x的时候 这时foo还指向{n:1},运算到右边表达式的时候 foo才指向{n:2}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javascript