Расширенные функции Javascript

Часть 17.

Было бы ложью, если бы я сказал вам, что то, что я собираюсь обсудить, легко понять; это не! Однако если вы останетесь на этом, у вас будет момент ага.

Я рассмотрю ключевые концепции, которые, как мне кажется, часто используются.

Взгляните на этот пример функции здесь:

Во-первых, давайте преобразуем эту функцию в новый синтаксис Javascript:

В части 16 мы узнали о размахе….



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

Это означает, что каждый раз, когда вы запускаете функцию first, каждый раз создается переменная greet.

Это хорошо, потому что гарантирует отсутствие конфликтов в нашей программе.

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

Таким образом, внутри функции мы гарантируем, что каждый раз, когда мы запускаем ее, это чистый лист; Вы можете удобно называть переменные как хотите, потому что больше ничего не будет с этим конфликтовать.

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

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

закрытие

Это функция, которая выполняется, выполняется и никогда не будет выполняться снова.

В нашем примере выше была выполнена первая функция, и ее результат был помещен в newfunc. Однако он сначала запомнит ссылки на эти переменные в .

Давайте посмотрим на эту функцию еще раз:
Если мы действительно запустим эту функцию, хотя first возвращает second, второй должен запомнить, что такое приветствие!

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

В этом случае веб-браузер говорит «ах! этой второй функции нужно приветствовать, я запомню это ".

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

Единственное, что у нас осталось, это функция second, но веб-браузер также запоминает greet.

Вывод:
Closures просто говорит, что функция запущена, функция выполнена и больше никогда не будет выполняться. Однако следует помнить, что в функции никогда не запускать снова были ссылки на переменные.

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

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

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

Итак, теперь, если я сделаю curriedMultiply (3);

Я получаю функцию, которая принимает b * a; s o это означает, что наша функция сообщает, что a = 3

но поскольку здесь есть две функции ((3) = ›(b) =›) - функция внутри функции - curriedMultiply (3) просто возвращает (b) = ›3 * b - функцию.

Итак, чтобы это сработало:
Мы говорим curriedMultiply (3) (4), что дает нам ответ 12.

У нас есть функция, которая принимает a (3) -, и как только вы вызываете эту функцию, она возвращает другую функцию, которая принимает b - функцию , который умножает a и b (a * b).

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

Теперь возникает важный вопрос: зачем нам это вообще нужно?

Нам нужно каррирование, потому что теперь наша функция более расширяема. Например:

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

Сочинять

Составление - это объединение двух функций в третью функцию, где выходные данные одной функции являются входными данными другой.

Создать выглядит так:

Параметры f & g возвращают функцию, которая принимает параметр a, который возвращает функцию с этим f (g (a))! Это действительно продвинутый материал.

Давай попробуем посмотреть, что здесь происходит?
Похоже, что f и g - обе функции, потому что они выделены для нас синим цветом.

Итак, если бы у меня была функция sum, которая принимает число и просто добавляет 1:

С помощью создания:

Если я запустил это:

Так почему?
Если и f, и g равны sum, а a равно 5:

Следующий:

Теперь давайте запустим внутреннюю функцию g:

Побочные эффекты

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

Функциональная чистота

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

Увидимся в 18-й части