Функции - это один из основных строительных блоков 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 для новой функции, а остальные аргументы представляют именованные параметры.
Частичное применение
Он очень похож на метод каррирования, за исключением того, что принимает только один аргумент.
В большинстве случаев каррирование используется вместо частичного из-за его высокой непредсказуемости.