JavaScript - это в основном функциональный язык. Он использует функции для реализации большинства сценариев программирования, таких как асинхронные задачи, парадигма объектно-ориентированного программирования и т. Д. В JavaScript функции обрабатываются аналогично объектам - они отправляются в качестве аргументов другим функциям и, помимо прочего, возвращаются из других функций.

Функции могут быть объявлены как традиционные функции, выражения, анонимные функции или с помощью оператора стрелки в зависимости от требований.

Определены традиционные функции:

Эти функции воспринимаются как методы, а не выражения. Они хранятся как функция, а не как переменная. Они поднимаются в начало области и, следовательно, могут использоваться до того, как они будут определены или объявлены.

Другой вариант - это анонимная функция, к которой не привязано имя функции.

Эти функции в основном используются там, где функция вызывается немедленно или при отправке ее другой функции в качестве аргумента (например, функция обратного вызова). Но анонимные функции бесполезны, если не используются немедленно, поскольку их невозможно идентифицировать.

Другой тип функции - это выражение функции:

Эти функции воспринимаются как выражения, а не как функции. Они присваиваются переменной и сохраняются в переменной. Значит, они не поднимаются в начало размаха. Следовательно, их можно использовать или вызывать только после того, как они объявлены или определены. Эти функции используются, когда функции необходимо рассматривать как переменные или выражения. Они также полезны при назначении функций методам объекта. Им присваивается атрибут «имя».

Самым последним добавлением к функциям является функция стрелки или встроенная функция. Это реализовано в версии JavaScript для ES6:

Эти функции рассматриваются как встроенные. Они раскрываются там, где они определены. Хотя стрелочные функции имеют более короткий синтаксис, они не могут использоваться в качестве методов объекта и не могут использоваться для них. Это потому, что у них нет контекста. У них нет привязки this. У них нет «аргументов», содержащих все переданные аргументы. Они не «уступают» и не «новая цель». Все эти преимущества обычных функций обмениваются на меньший и более простой код.

Одной из основных особенностей стрелочных функций является неявный возврат. Тело функции с одним оператором подразумевает возврат:

Из этого следует:

Это особенно полезно при использовании таких методов, как map и filter, где используется код функционального стиля:

Короче говоря, у каждого типа или стиля работы есть свои положительные и отрицательные стороны. Самый оптимальный стиль будет наиболее полезным в этой ситуации.