Функции высокого порядка - простой режим

Я намерен немного рассказать о функциях высокого порядка с помощью Javascript.

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

Это позволяет JS быть более гибким и подключаемым.

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

Затем, если вы запустите fnName () в консоли , появится небольшое окно (модальное) вроде этого:

Когда вы вводите свое имя и нажимаете ОК, процесс завершается.

Итак, теперь у меня есть новая функция, которая получает функции, посмотрите:

К счастью, ES06 ++, я могу использовать это: … funcs (аргументы деструктуризации), получаю много аргументов внутри массива, тогда у меня есть массив функций.

В приведенном выше коде const withNameComplete получает другую функцию, которая делает что угодно за нас. Но у меня сложность с Map в дополнение к HOC.

Эта функция может получать множество аргументов, например: withNameComplete (a, b, c, d, e, f), и у меня есть Array (a, b, c, d, e, f), когда Я использую … funcs, как в моем примере выше.

Приведенный выше код дает следующее:

Как я уже сказал, выше я утешаю массив с тремя функциями.

Итак, все, что мне нужно сделать, это вызвать каждую функцию внутри массива.

Теперь у меня есть куча альтернатив, сначала я использую Map, второй - Reduce. Пожалуйста, если у вас есть лучшее решение, я хотел бы узнать, поделитесь своими знаниями.

Первое решение:

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

Используя Map из ES06, я могу перебрать каждую функцию внутри Array func и выполнить, он вернет новый массив (спасибо неизменяемости, возможно, это еще один пост), а затем я использую функцию join (''), который извлекает значения нового массива и помещает их в строку.

Второе решение:

Таким образом я буду использовать Уменьшить:

Проверьте это, только изменил map на reduce, и я использую строку шаблона для объединения строк и использую функцию trimStart для удаления пробелов. начальной строки, потому что аккумулятор начинается с этого одного значения.

С функцией уменьшения возврат метода - это накопленное значение (acc) плюс текущее значение (cv). Однако, как я использую строку шаблона, трудно понять.

Наконец, HOC, Array.Map и Array.Reduce - это предметы, которые трудно понять вначале, но с теорией и практикой вы легко это поняли, не сдавайтесь, продолжать учиться - лучший способ.

Итак, опять же, если у вас есть лучшее решение, я хотел бы знать.

Все в одном:

И последнее, но не менее важное: хотите ли вы увидеть что-нибудь интересное и продвинутое о HOC и Reduce, взгляните на это: https://github.com/acdlite/recompose/blob/master/src/packages/recompose/compose. js

Спасибо за чтение!

Также вы можете прочитать об этом: https://medium.com/javascript-scene/higher-order-functions-composing-software-5365cf2cbe99

Пс. Это моя первая статья на английском языке! \ o /