Замыкание
«Замыкание — это функция, которая имеет доступ к внешней функции, даже после того, как выполнение внешней функции прекратилось.»
«Замыкания — одна из наиболее важных фундаментальных концепций в JavaScript, которую должен понимать каждый JS-разработчик.»
Требования для создания замыкания
- Внешняя функция, которая вызывается в коде
- Внутренняя функция внутри внешней
- Внешняя функция возвращает внутреннюю
Базовый пример
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('Мир') // 'Привет Мир'