Разница в том, как this
работает с функциями в JS. Это объяснение взято из этого источника
В выражениях функций classi c ключевое слово this
связано с различными значениями в зависимости от контекста, в котором оно вызывается. Однако с функциями стрелок это связано с лексикой. Это означает, что он использует это из кода, который содержит функцию стрелки.
Например, посмотрите на функцию setTimeout ниже:
// ES5
var obj = {
id: 42,
counter: function counter() {
setTimeout(function() {
console.log(this.id);
}.bind(this), 1000);
}
};
В примере ES5 .bind (this) требуется, чтобы помочь передать этот контекст в функцию. В противном случае по умолчанию это будет undefined
.
// ES6
var obj = {
id: 42,
counter: function counter() {
setTimeout(() => {
console.log(this.id);
}, 1000);
}
};
Функции стрелки ES6 не могут быть привязаны к ключевому слову this, поэтому он будет go расширять область видимости и использовать значение этого в объеме, в котором оно было определено.
Источник к объяснению