其实箭头函数是没有this的,箭头函数中的this只取决包裹箭头函数的第一个普通函数的this。
我们来看一个例子:
function a() { return () => { return () => { console.log(this) } } } console.log(a()()())
这个例子中,包裹箭头函数的第一个普通函数是a
,所以此时的this
是window
。
或者也可以这么去解释箭头函数:
箭头函数的this指向的是定义函数时所在的作用域的this,而不是函数被调用时的作用域的this,这就是「箭头函数」一大特点。
如果我们在全局作用域中定义一个箭头函数时,那么它的this指向的就是全局对象(通常是window)。
const foo = () => { console.log(this) // 输出: Window { ... } } fn();
写在最后:需要注意一下的是,由于箭头函数的this是在定义时确定的,因此无法通过call、apply、bind等方法来改变它的指向。