箭头函数和普通函数的this指向问题

182 阅读1分钟

一、箭头函数的this指向问题

  1. 先看下面代码,如果你能给出正确答案,证明你已经知道了,如果还不会,看完也就会了,上代码
var Person = {
    'age': 18,
    'sayHello': function () {
      setTimeout(function () {
        console.log(this.age);
      });
    }
};
var age = 20;
Person.sayHello();//这个输出的答案是啥

定义的Person是一个全局变量,那么它的this指向的自然就是windows了,然后又在windows调用这个对象里面的sayHello方法,那么你们懂得!!!方法里的this指向的就是windows了,至于为什么呢!你们可以自行试一下,这里就不多加解释了。 2. 箭头函数的this

var Person1 = {
    'age': 18,
    'sayHello': function () {
      setTimeout(()=>{
        console.log(this.age);
      });
    }
};
var age = 20;
Person.sayHello();//这个输出的答案是啥

跟上面的用法差不多,只不过这里的方法换成了箭头函数,那么它的正确答案却是18哦!因为箭头函数它本身是没有this的,它使用的this是它最近一个作用域的this,也就是说箭头函数在哪里定义的,那么它的this就指向谁。

二、上面就是箭头函数跟普通函数this的用法,只要记住普通函数的this指向的是:谁调用了我,我就指向谁,箭头函数的this是:谁定义了我,我就指向谁。OK,你学废了吗!!!