一道被"坑"到的前端Javascript面试题

前一段时间去了一个小公司面试前端,被”坑”的体无完肤了…,来分享一下这道题
一道js面试题,当时面试时完全说了一个相反的结果

  var a = { n : 1};  
  var b = a;  
  a.x = a = {n:  2};  
  alert(a.x);  
  alert(b.x);

结果是这样的:

undefined  
[object Object]

其实这类问题很容易理解,只需要记得变量只是对象的引用,变量并不是对象本身。

  1. 取值的时候顺着变量找到对象;
  2. 赋值的时候则改变变量的指向

所以

  1. 对于 var a = {n: 1},想象一个对象 {n: 1} 放地上,用 a 指着它;
  2. var b = a 就是 b 顺着 a 找到 {n: 1},两者同时指着它;
  3. a.x = a = {n:2} 左往右看,
    1.a.x 是对 a 取值,顺着 a 找到 {n: 1},再找到其 x 属性等待赋值,
    2.第二个 a 本应是取值,但右边有 = 所以继续变成了赋值操作,a 指向 {n:2},
    3.a = {n:2} 返回 {n:2},给了等待赋值的 {n: 1}.x;

  4. alert(a.x),顺着 a 找到 {n:2},因为在 3.2 中 a 改变了指向,而 {n: 2} 没有 x 属性;

  5. alert(b.x),顺着 b 找到 {n: 1},{n: 1}在 3.1 得到了 x,顺着 x 找到了 {n: 2}。

答案参考:https://segmentfault.com/q/1010000011462692?_ea=2643381

另一个面试题,是 this在箭头函数和普通函数中的情况

参见: 深入理解 this, http://blog.csdn.net/yangbingbinga/article/details/61424363

转自:http://blog.csdn.net/yangbingbinga/article/details/61424845

发布了179 篇原创文章 · 获赞 82 · 访问量 55万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章