箭头函数this指向哪里

其实箭头函数是没有this的,箭头函数中的this只取决包裹箭头函数的第一个普通函数的this。

箭头函数

我们来看一个例子:

function a() {
  return () => {
    return () => {
      console.log(this)
    }
  }
}
console.log(a()()())

这个例子中,包裹箭头函数的第一个普通函数是a,所以此时的thiswindow

或者也可以这么去解释箭头函数:

箭头函数的this指向的是定义函数时所在的作用域的this,而不是函数被调用时的作用域的this,这就是「箭头函数」一大特点。

如果我们在全局作用域中定义一个箭头函数时,那么它的this指向的就是全局对象(通常是window)。

const foo = () => {
  console.log(this) // 输出: Window { ... }
} 

fn();

写在最后:需要注意一下的是,由于箭头函数的this是在定义时确定的,因此无法通过call、apply、bind等方法来改变它的指向。