天天看点

每日两道面试题

每日两道 面试题

20210826 面试题

第一题

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

obj.pro.getPro()
           

解析

  • 首先,全局变量a的值是10,obj对象里面有两个key 分别是a和pro,a的值是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}

继续阅读