首先,我想先说明一下,我们在普通的函数中的this指向
1. 普通函数中的this 总是指向她的调用者.
2. 像 call, apply, bind这些函数是能够去改变当前的this指向的,及她的宿主对象(什么是宿主对象,嘿嘿,不要想歪,以后会有文章专门介绍)
3. 在严格模式和非严格模式下(‘use strict'), this指向是有变化的, 非严格模式下,this总向上去寻找她的宿主, 而严格模式下并不会
现在,我们再来说说箭头函数中的this
首先先了解下,什么是箭头函数.
let a = ()=>{}
这就是最简单的箭头函数
我们再来看一个例子图1
a.b()此时this.a 为undefined, 为什么呢?因为虽然当前的this是有a来调用的,但是再匿名函数中, 她里面的this指向的不是她的调用者,而是她的宿主对象,及定义改函数的上下文, 是window对象在这里.
我们再看一个例子图2
这a.d()的结果是什么呢, 居然是‘123’, 不是说匿名函数中this 不是指向她的调用者,而是她的宿主对象吗, 其实并没有矛盾,再setTimeout中,她的this确实指向的是宿主对象, 而这里的this,声明环境是a, 是在a对象中声明的,所以她的this,指向的就是a.