每日一道面试题

103 阅读1分钟

第一题

 var a = 10;
 var obj = {
     a:100,
     pro: {
         getPro: () =>{
             console.log(this.a);
         }
     }
 }
 ​
 obj.pro.getPro()

解析

  • 首先,全局变量a的值是10obj对象里面有两个key 分别aproa的值是100
  • pro则是一个对象,pro里面的getPro是一个箭头函数,箭头函数里面执行this.a
  • 箭头函数不会创建自己的this,他只会从自己的作用域的上一层继承this,所以这里的this指向window,打印出来的结果就是10

第二题

 var a= {n:1};
 var b=a;
 a.x = a ={n:2};
 console.log(a.x);
 console.log(b.x);
 ​

解析

  • 首先,a是一个对象,里面只有一个key为n,
  • n的值是1, b=a ,那么b指向的对象 跟a指向的对象是同一个对象。
  • a.x = a ={n:2},这里面的 . 点运算 优先级大于 = 的运算优先级,所以a.x 先进行运算
  • a指向的对象中多了一个key为x,接下来运算 = ,赋值运算时从右向左进行的,所以会给a对象重新赋值,a指向的对象变成了{n:2} ,a.x = a 就是a.x = {n:2}.
  • 运算完毕以后,a现在是{n :2},b现在是 {n:1,x:{n:2}}, 所以打印出来的结果是undefined, {n:2}