Назад к вопросам
Intern
11
Почему нельзя использовать стрелочную функцию для groupBy? Какой this будет в стрелке?
Компании, где спрашивали
Яндекс
Ответ от нейросети
sobes.tech AI
Стрелочные функции в JavaScript не имеют собственного контекста this. Вместо этого они захватывают this из внешней области видимости, где были определены. В случае метода groupBy (например, в библиотеках или при реализации группировки) часто требуется, чтобы this внутри функции указывал на текущий элемент или на объект, с которым работает функция.
Если использовать стрелочную функцию, this не будет указывать на ожидаемый объект, что приведёт к ошибкам или неправильной логике.
Пример:
const obj = {
values: [1, 2, 3],
groupBy(callback) {
const groups = {};
for (const value of this.values) {
const key = callback.call(value, value); // ожидается, что this внутри callback — это value
if (!groups[key]) groups[key] = [];
groups[key].push(value);
}
return groups;
}
};
// Правильно с function
obj.groupBy(function() { return this % 2 === 0 ? 'even' : 'odd'; });
// Неправильно со стрелочной функцией, this будет не value
obj.groupBy((value) => value % 2 === 0 ? 'even' : 'odd');
Таким образом, стрелочная функция не подходит, если внутри callback нужно использовать динамический this.