Sobes.tech
Back to questions
Intern
10

Почему нельзя использовать стрелочную функцию для groupBy? Какой this будет в стрелке?

Companies where asked
Яндекс

Answer from 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.