如果没有学习过this的指向的话,可以简单学习一下。JavaScript中this指向
不是很详细,但是大部分的情况都能包括到了,也可以在做题的过程随时复习。
this指向规则
- 默认绑定 函数独立调用 this指向window
- 隐式绑定 通过某个对象进行调用 this指向调用的那个对象
- 显式绑定 使用call、apply、bind方法进行绑定 this指向绑定的那个对象
- new绑定 使用new关键字来调用函数的时候 this指向调用的那个对象
- 箭头函数没有this 所以会往上层作用域查找
this指向的其他情况
- 如果在显式绑定中传入null或者undefined 这个绑定会被忽略 this指向window
- 创建一个函数的间接引用 这种情况使用默认绑定 this指向window
this指向规则的优先级
- new绑定 > bind绑定 > call/apply绑定 > 隐式绑定 > 默认绑定
1.this面试题一
//面试题一
var name = "window";
var person = {
name: "person",
sayName: function () {
console.log(this.name);
}
}
function sayName() {
var aaa = person.sayName;
aaa();
person.sayName();
(person.sayName)();
(b = person.sayName)();
}
sayName();
在这个面试题一中调用了sayName函数,要求写出aaa()、person.sayName()、(person.sayName)()、(b = person.sayName)的结果。
- aaa(): 将person对象中的sayName函数赋给了变量aaa,但是aaa()在进行调用的时候使用的是this指向规则中默认绑定,所以this指向的是window,在window中刚好定义了一个值为window的name变量,所以输出window
- person.sayName(): person对象调用的sayName函数,所以是隐式绑定,this指向person对象,所以输出person
- (person.sayName)(): 和上一题一致,加了小括号()只不过是加了优先级,还是隐式绑定,所以输出person
- (b = person.sayName)(): 是上述this指向的其他情况中的,创建一个函数的间接引用,这种情况使用默认绑定,所以输出window
面试题一答案速查