关于百度开源面试题
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}
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}
相关文章推荐
- 关于百度的开源Apollo项目
- 常数时间内求栈内最大值(iteye上一篇关于百度面试题文章的读后感)
- 百度的一道面试题(关于Cache的)
- 百度的一道面试题(关于Cache的)
- 关于淘汰85%面试者的百度开发者面试题的看法
- 一道百度面试题,关于海量数据处理,你有更好的方法吗?
- 关于桌面软件、客户端使用百度的开源UEditor
- 关于淘汰85%面试者的百度开发者面试题
- 百度的一道面试题(关于Cache的)
- 百度面试题 关于分组游戏的设计
- 关于一道IEEE754浮点数标准的百度面试题再论
- Docker 开源项目之 registry - 关于 registry
- 关于指针,数组指针,函数指针,指针的指针等面试题的详细攻略
- 关于数组的几道面试题
- 关于开源框架GPUImage 的简单说明
- 关于一道简单的Java 基础面试题的剖析: short s1=1;s1 = s1 +1会报错吗?
- 百度面试题
- 关于类、继承、抽象方法、构造函数等求输出结果的一些面试题
- 关于正则表达式的一道面试题
- 关于ArrayList的5道面试题