Вопрос проверяет понимание различий между обычными и стрелочными функциями в JavaScript, включая поведение this, arguments и синтаксис.
Стрелочные функции были введены в ES6 и отличаются от обычных функций несколькими ключевыми аспектами. Главное отличие — отсутствие собственного контекста this. Вместо этого они используют this из окружающей области видимости, что делает их удобными для колбэков и методов, где важно сохранить контекст.
В обычной функции this определяется тем, как функция вызывается (метод объекта, глобальный вызов, через call/apply). В стрелочной функции this всегда равен this внешней функции или глобальному объекту, если стрелочная функция объявлена на верхнем уровне.
const obj = {
name: 'Alice',
regular: function() { console.log(this.name); },
arrow: () => { console.log(this.name); }
};
obj.regular(); // Alice
obj.arrow(); // undefined (this = global)
Стрелочные функции не имеют собственного объекта arguments. Если нужно получить аргументы, используйте rest-параметры.
const sum = (...args) => args.reduce((a, b) => a + b, 0);
console.log(sum(1, 2, 3)); // 6
Стрелочные функции не имеют свойства prototype и не могут вызываться с new. Это предотвращает их использование для создания объектов.
Если тело функции — одно выражение, можно опустить фигурные скобки и слово return. Это делает код лаконичнее.
const double = x => x * 2;
Стрелочные функции стоит применять для коротких колбэков, методов, где нужен лексический this, и функционального стиля. Обычные функции лучше использовать для методов объектов, конструкторов и случаев, когда нужен собственный arguments.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию