В этом посте мы рассмотрим HOF (функция высшего порядка), обратные вызовы и дурацкие замыкания JavaScript, которые заставляли нас рвать на себе волосы в какой-то момент на протяжении всего пути обучения.
1. Функции высшего порядка (HOF)
Функции могут быть назначены переменным в Javascript таким же образом, как строки, числа, логические значения и массивы. Они могут быть переданы в качестве аргументов другим функциям или возвращены из них.
Функция, которая принимает функции в качестве параметров и/или возвращает функцию, называется «функцией высшего порядка».
Например
const isEven = (x) => x > 0 && x % 2 === 0
const logger = (Fn, Num) => { const isEven = Fn(Num) console.log(isEven) }
logger(isEven, 6)
Поскольку он принимает функцию isEven в качестве входных данных, «логгер» является функцией высшего порядка в предыдущем отрывке.
Некоторые методы JavaScript, такие как map, filter, reduce и т. д., являются функциями более высокого порядка.
2. Функция обратного вызова
Обратный вызов — это функция, которая предоставляется в качестве входных данных для другой функции, а затем запускается позже. isEven — это функция обратного вызова в последнем фрагменте кода.
Обратный вызов — это функция, которая передается другой функции в качестве аргумента.
После завершения другой функции может быть вызвана функция обратного вызова.
Например
const logger = (output) => console.log(output)
const add = (x, y, callback) => { const z = x + y logger(z) }
add(51, 96, logger)
В этом фрагменте кода регистратор — это функция обратного вызова, которая передается функции добавления в качестве аргумента и вызывается после добавления двух чисел для отображения результата.
Асинхронный JavaScript можно обрабатывать с помощью функций обратного вызова.
3. Закрытие
Переменные в JavaScript могут быть в локальной или глобальной области видимости. Замыкания могут использоваться для того, чтобы сделать глобальные переменные локальными (приватными).
Закрытие — это функция, которая продолжает иметь доступ к внешним переменным после того, как внешняя функция была возвращена.
let countryCode = '+1'
function getPhoneNumber() { let phone = '2354687262' function encryptedPhone() { // A closure function let encryptedNumber = phone * 5 return countryCode + encryptedNumber }
return encryptedPhone } getPhoneNumber()() // +111773436310
Функция закрытия, зашифрованная телефоном в следующем фрагменте кода, имеет доступ к внешним переменным (countryCode и phone).
Из-за лексической области видимости в JS возможны замыкания. Если переменная не обнаружена в локальной области, она ищется во внешней области и так далее, пока не достигнет глобальной области.
Примечание. За исключением функций, созданных с использованием синтаксиса «новая функция», каждая функция в JavaScript является замыканием.
Спасибо, что прочитали эту статью.
Купи мне кофе здесь https://www.buymeacoffee.com/gyanknojiya
Если у вас есть какие-либо вопросы, не стесняйтесь обращаться ко мне здесь
Первоначально опубликовано на https://codingcafe.co.in 20 ноября 2021 г.