Функции высшего порядка на практике
Вопрос
Что такое функции высшего порядка? Расскажите, какие вы используете и какие писали сами.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Определение: принимает или возвращает функцию; возможно, потому что функции это значения
Встроенные примеры: методы массивов, таймеры, обработчики, `then`
Свои: фабрики, `debounce`/`throttle`, `memoize`, обёртки для логирования или повторов
Связь с замыканиями: возвращённая функция хранит настройки во внешней области
Плюсы: переиспользование поведения, декларативный код
Минусы: глубокая вложенность читается хуже, легко потерять `this`
Что могут спросить следом
- Напишите функцию
once. - Почему
['1','2','3'].map(parseInt)даёт неожиданный результат? - Чем HOF отличается от HOC в React?
Разбор
Образцовый ответ: «Функция высшего порядка принимает функцию аргументом или возвращает функцию. В JS это естественно, потому что функции это обычные значения. Каждый день я пользуюсь встроенными: map, filter, reduce, setTimeout, addEventListener, then у промисов. Сам писал, например, debounce для поиска: функция принимает обработчик и задержку и возвращает новую функцию, которая хранит id таймера в замыкании. Ещё обёртку withRetry, которая принимает асинхронную функцию и повторяет её при ошибке с паузой. Плюс таких функций в том, что поведение отделено от бизнес-логики и переиспользуется. Минусы: цепочки из многих обёрток хуже отлаживать, и при передаче метода как колбэка можно потерять this. Похожая идея в React называется компонентом высшего порядка, но сейчас её чаще заменяют хуками».
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.