Как отличается использование стрелочных функций от стандартных функций в JavaScript?
Ответ от нейросети
sobes.tech AI
Что хотят услышать интервьюеры:
Стрелочные функции и обычные функции отличаются в первую очередь тем, как у них работает this. У стрелочных функций this берётся из внешнего контекста, а у обычных — зависит от способа вызова. Также у стрелочных функций нет собственного arguments, и их нельзя использовать как конструктор через new.
Определение:
Стрелочная функция — это компактный синтаксис для объявления функции в JavaScript. Главное отличие от стандартной функции — она не создаёт собственный контекст this, а закрывает его из окружающей области видимости. Это делает её удобной для колбэков и коротких функций, но не всегда подходит для методов объектов и функций, где нужен динамический this.
Пример использования:
const user = {
name: 'Alex',
regular() {
setTimeout(function () {
console.log('обычная функция:', this.name);
}, 100);
},
arrow() {
setTimeout(() => {
console.log('стрелочная функция:', this.name);
}, 100);
}
};
user.regular();
user.arrow();
Пояснение кода:
В regular() внутрь setTimeout передаётся обычная функция. У неё свой this, поэтому this.name обычно не указывает на user.
В arrow() передаётся стрелочная функция. Она берёт this из метода arrow(), то есть из объекта user, поэтому this.name будет 'Alex'.
Ключевые моменты:
- У стрелочных функций нет собственного
this,arguments,superиnew.target. - Стрелочные функции нельзя вызвать через
new. - Обычные функции удобны, когда нужен динамический
this, например в методах объектов или конструкторах. - Стрелочные функции удобны для колбэков,
map,filter,setTimeoutи других коротких функций. - У обычной функции
thisопределяется в момент вызова, у стрелочной — в момент создания. - Для методов объекта чаще используют обычные функции, а для вложенных колбэков внутри них — стрелочные.