Intern
29
GroupBy үшін стрелка функциясын қолдануға бола ма? Стрелкада 'this' не болады?
Сұралған компаниялар
Яндекс
AI-дан жауап
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.