Замыкание

«Замыкание — это функция, которая имеет доступ к внешней функции, даже после того, как выполнение внешней функции прекратилось.»

«Замыкания — одна из наиболее важных фундаментальных концепций в JavaScript, которую должен понимать каждый JS-разработчик.»

Требования для создания замыкания

  1. Внешняя функция, которая вызывается в коде
  2. Внутренняя функция внутри внешней
  3. Внешняя функция возвращает внутреннюю

Базовый пример

const getFruit = () => {
  let fruit = 'Банан'
  const show = () => { return fruit }
  return show
}
const showFruit = getFruit()
showFruit()  // 'Банан'

Счётчик

const makeCounter = () => {
  let x = 0
  return () => { return ++x }
}
const counter = makeCounter()
counter() // 1
counter() // 2
counter() // 3

Расширенный счётчик

let makeCounter = () => {
  let x = 0
  return {
    inc: () => { return ++x },
    dec: () => { return --x },
    val: () => { return x }
  }
}
let counter = makeCounter()
counter.inc() // 1
counter.inc() // 2
counter.dec() // 1

Запоминание фразы (каррирование)

let phrase = x => {
  return y => { return x + ' ' + y }
}
let hello = phrase('Привет')
hello('Мир')  // 'Привет Мир'