每日两道 面试题
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}