Функции - это один из основных строительных блоков JavaScript. Функция - это процедура JavaScript - набор операторов, выполняющих задачу или вычисляющих значение. Чтобы использовать функцию, вы должны определить ее где-нибудь в области видимости, из которой вы хотите ее вызвать. (Developer.mozilla.org)

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

Объем функций

Когда мы определяем функцию, область видимости создается функцией. Все, что определено внутри функции, недоступно вне функции. Например, переменная, определенная внутри функции, становится ЛОКАЛЬНОЙ для этой функции, и к ней можно получить доступ только из самой функции.

Ниже приведен базовый пример области видимости функций.

Для вложенных функций также применяются те же правила.

Каррирование

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

Вы можете спросить, зачем использовать каррирование. Вот практический пример использования каррирования.

Допустим, у нас есть функция под названием `add`, которая принимает два аргумента и возвращает общую сумму этих аргументов.

Теперь усложним задачу, зафиксировав первый аргумент, т.е. `a`, который всегда должен быть 4, но может быть вероятность передачи других чисел по ошибке. Чтобы решить эту проблему, мы можем использовать функцию каррирования.

Сразу вызываемые функциональные выражения (IIFE)

Выражение функции с немедленным вызовом - это самоисполняющаяся анонимная функция, которая выполняет функцию немедленно, как только она была создана.

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

Именованная / неназванная функция

Функции могут быть именованными или безымянными (анонимные функции).

Некоторые ключевые различия между именованными и безымянными функциями:

  • Именованные функции поднимаются, а безымянные - нет. Named может вызываться только после строки объявления, в то время как un named можно вызывать до объявления.
  • Именованные функции полезны для удобной отладки, так как имя функции будет отображаться в трассировке ошибок / стека.

Связывание this и аргументов

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

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

Пример ниже прояснит это.

Примечание. Если не в строгом режиме, this по умолчанию является объектом окна, а в строгом режиме this по умолчанию не определен.

Вариадические функции

Функции с неизвестным числом аргументов называются вариативными функциями.

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

  • Метод 1 (ES5): По умолчанию функция имеет объект типа arguments в своей области действия, содержащий все аргументы, переданные функциям. Используя индекс, мы можем получить доступ к аргументам.
  • Метод 2 (ES6): Функцию можно объявить с ее последним параметром, используя оператор отдыха (…). Это создает массив, в котором хранятся аргументы с этого момента.

Параметры по умолчанию

Есть 2 метода объявления параметров по умолчанию в JavaScript.

  • Метод 1 (ES5):
  • Метод 2 (ES6):

Позвонить, подать заявку и привязать

Это встроенные функции Javascript, которые помогают предоставлять аргументы и this по-разному.

Вместо описания пример может быть более полезным для понимания функций вызова и применения.

Привязка аналогична call & apply, которая используется для явной установки значения this функции для конкретного объекта. Но ведет себя совсем иначе; Первым аргументом bind () является значение this для новой функции, а остальные аргументы представляют именованные параметры.

Частичное применение

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

В большинстве случаев каррирование используется вместо частичного из-за его высокой непредсказуемости.