Проверяет понимание разницы между передачей именованной функции и стрелочной обёртки в forEach, включая поведение this и лишние аргументы.
Метод forEach вызывает переданный колбэк с тремя аргументами: текущим элементом, индексом и самим массивом. Когда вы передаёте ссылку на функцию напрямую, она получает все три аргумента, даже если вы ожидали только один. Это может привести к неожиданному поведению, если функция принимает дополнительные параметры.
Классический пример — parseInt. Если передать его напрямую в map или forEach, вторым аргументом придёт индекс, который parseInt воспримет как основание системы счисления.
const arr = ['1', '2', '3'];
arr.map(parseInt); // [1, NaN, NaN]
arr.map(x => parseInt(x)); // [1, 2, 3]При передаче обычной функции this внутри неё будет undefined (в строгом режиме) или globalThis. Стрелочная обёртка захватывает this из внешней области видимости, что часто удобнее.
const obj = {
value: 10,
run(items) {
items.forEach(function (x) {
console.log(this); // undefined
});
items.forEach((x) => {
console.log(this.value); // 10
});
}
};Стрелочная обёртка создаёт новую функцию при каждом вызове forEach, тогда как ссылка на уже существующую функцию переиспользуется. В горячих циклах это может иметь значение. Однако обёртка делает код явным: видно, какие аргументы реально используются.
forEach, и this не важен.this или добавить дополнительную логику.Итог: стрелочная обёртка даёт контроль над аргументами и this, а прямая ссылка экономит создание функции. Выбор зависит от сигнатуры колбэка и контекста вызова.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию