В этом посте мы рассмотрим 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 г.