面试官:es6、箭头函数、this指向你是否了解

说到this指向其实,面试官八成会有以下问题:

目录

严格模式是啥?飞机票下面==>  严格模式官方文档

        1.箭头函数你是否有了解?

        2.bind() call() apply() 的作用? 区别?                

        3.箭头函数的this指向?是否可以改变?严格模式下的指向?

         4.是否封装过bind ?

         5.es5 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 他指向其他地方有什么用嘛。球用没得。

                我觉得这个问题一般面试官不会问。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值