Só complementando:
arrow functions "herdam" o this do contexto mais próximo. Mas nao declaram um contexto próprio.
Ex:
class A {
methodA() { }
methodB() {
const b = () => this.methodA()
}
}
functions contém um this próprio, ou seja, um contexto.
Quando uma function é chamada diretamente (foo()) o this dela é undefined.
Se uma function é instanciada (new foo()) o this vai ser a instancia da function (da msm forma que acontece com classes).
Ex:
class A {
methodA() { }
methodB() {
const b = function() {
this.methodA(); // vai dar erro pq this é undefined
}
const a = new (function ()
}
}
Function e arrow function são duas coisas diferentes. Muita gente confunde isso, pensando que são apenas formas diferente de declarar uma função