Чем стрелочные функции отличаются от обычных функций? стрелочные функции — сокращённый синтаксис JavaScript для создания функций не формируют собственный контекст this, а наследуют его из внешней лексической области (lexical this) не могут быть конструкторами и не вызываются через new не предоставляют собственный объект arguments не обладают методами prototype и super особенно удобны в колбеках, где важно сохранить контекст this обычные функции формируют собственный this, поддерживают перегрузку и представляют собой полноценные объекты-функции
Что такое стрелочные функции в JavaScript и чем они отличаются от обычных?
Чем стрелочные функции отличаются от обычных функций? стрелочные функции — сокращённый синтаксис JavaScript для создания функций не формируют собственный контекст this, а наследуют его из внешней лексической области…
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Чем стрелочные функции отличаются от обычных функций?
- стрелочные функции — сокращённый синтаксис JavaScript для создания функций
- не формируют собственный контекст this, а наследуют его из внешней лексической области (lexical this)
- не могут быть конструкторами и не вызываются через new
- не предоставляют собственный объект arguments
- не обладают методами prototype и super
- особенно удобны в колбеках, где важно сохранить контекст this
- обычные функции формируют собственный this, поддерживают перегрузку и представляют собой полноценные объекты-функции
Поэтому стрелочные функции дают компактную запись и хорошо подходят для сценариев с лексическим this, однако не используются в классических случаях, связанных с конструкторами и методами.
Подробный ответ
Основной ответ
Стрелочные функции (arrow functions) — сокращённый синтаксис объявления функций в JavaScript, добавленный в ES6. Их отличие от обычных функций заключается не только в компактной записи: у них иначе определяется this, отсутствует собственный объект arguments, а использовать их в роли конструкторов нельзя.
Ключевые моменты
thisлексическое, а не динамическое: В стрелочной функции значениеthisнаследуется из внешнего контекста. Это удобно, когда в колбеках и методах требуется сохранить контекст. У обычной функции значениеthisопределяется способом её вызова.- Собственного объекта
argumentsнет: Обратиться к объектуargumentsвнутри стрелочной функции нельзя; для получения аргументов обычно применяют rest-параметры (...args). - В качестве конструктора не используется: У стрелочной функции отсутствует внутренний метод
[[Construct]], поэтому попытка вызвать её черезnewзавершится ошибкой. - Синтаксис более компактный: ключевое слово
functionне требуется, а в однострочных выражениях можно не писать фигурные скобки и ключевое словоreturn.
Практический контекст
Например, в React 18+ стрелочные функции широко применяют для объявления компонентов и обработчиков: они сохраняют контекст и помогают избежать проблем, связанных с this. В функциональных колбеках и промисах arrow functions также популярны благодаря краткости и удобству. Однако для функции-конструктора или метода, которому нужен динамический this, обычно выбирают классическую функцию.