说到this指向其实,面试官八成会有以下问题:
目录
2.bind() call() apply() 的作用? 区别?
3.箭头函数的this指向?是否可以改变?严格模式下的指向?
严格模式是啥?飞机票下面==> 严格模式官方文档
1.箭头函数你是否有了解?
面试官问出这个问题,先想想面试官想听到的答案是什么 ?
1:从函数结构方向思考:“箭头函数相比普通函数,省略了function、return关键字,没有原型,结构简单清晰,代码量更小。”
2:从this作用域方向回答:“普通函数就是谁调用就指向谁,在非严格模式下,默认指向window,严格模式下this指向undefined。箭头函数的指向是window,无论是否是严格模式,并且bind() apply() call() 是不可以改变箭头函数this的作用域的。”
//普通函数
var a = {
b: 1,
c: function () {
console.log(this.b) // 输出 1
console.log(b) // 报错 输出 b is not defined
}
}
a.c()
//箭头函数
var a = {
b: 1,
c: () => {
console.log(this) // window
console.log(this.b) // undefined 为啥呢?因为 这个时候this指向window window没有b
// 这个属性所以undefined
},
d:function(){
console.log(this.b)// 1 普通函数 谁定义的 this就指向谁
}
}
a.c()
console.log(a.c.prototype) // undefined 箭头函数没有原型
console.log(a.d.prototype) //{constructor: ƒ} 这个是d函数的构造函数,
//call()使用 可以传很多个值进去 第一个是this的指向
var dict = {
b: 1,
c: function () {
console.log(this.b) // 输出 1
// console.log(b) // 输出 b is not defined
}
}
dict.c.call(dict) // 1
dict.c.call(this) // undefined
//apply()
var dict = {
b: 1,
c: function (a, b) {
console.log(this.b) // 输出 1
console.log(this.b + a + b) // 输出 4 这个地方的this指向dict dict中的b==1 所以答为3
// console.log(b) // 输出 b is not defined
}
}
let arr = [1, 2]
dict.c.apply(dict, [...arr])// 输出 1 然后再输出 3
console.log('-----分隔符-----')
dict.c.apply(this, [...arr]) // 输出undefined 然后再输出 3
2.bind() call() apply() 的作用? 区别?
先来看个图,注意观察一下区别!
看完后我们先讲讲共同点:“这三个接受的第一个参数默认为this指向的对象,如果bind(a)回调中this就指向a”
再来看看区别:
区别1: call() 和apply () 马上就执行了foo方法中的代码,也就是说call() 和apply() 有立即执行回调函数的这么一个特点,bind() 就没有执行这个代码,bind()需要我们手动去调用才能执行。
区别2:apply只有2个参数第一个是this的指向,第二个是一个数组,而bind 和 call支持this的同时还支持其他的多个参数,1,2,3,4,5只是举个🌰。
从这两个图我们看到foo中的console.log(this)并不是固定的。
那么我们再来看看箭头函数下情况是否一致呢?
我们先看看正常情况下,箭头函数的this指向是谁呢? 答案是: window!!!
我们再来看看,apply dind call 对箭头函数是否有影响?
答案看起来是否定的,不过bind 还是 apply 还是 call 都没有对箭头函数起到作用,(ps: 臭屁单身箭头函数,不识好歹,谁也不认。)
3.箭头函数的this指向?是否可以改变?严格模式下的指向?
写着写着,发现问题二的答案中包含了大部分的问题三的答案。就剩个严格模式下的箭头函数this指向没有说了。然而箭头函数的this指向还是window。并没有什么改变
4.是否封装过bind ?
飞机票====> javascript bind 方法封装_公孙秀儿的博客-CSDN博客
5.es5 this的指向?
多送情况这种题目是送分题,主要是想看看你的思维在不在线。在非严格模式下和严格模式下的this指向window。不过你想想除了window 他指向其他地方有什么用嘛。球用没得。
我觉得这个问题一般面试官不会问。