Замыкания в JavaScript
В JavaScript функция — это блок кода, предназначенный для выполнения определенной задачи. Он запускается, когда вы его вызываете.
Например:
function myFunction(message){
console.log(message)
}
myFunction("Hello there!!")
myFunction("Welcome, boss")
Но что, если мы хотим знать, что произошло при первом или предыдущем выполнении. Вот где происходит закрытие.
Что такое замыкания?
Проще говоря, когда функция возвращает другую функцию, которая имеет доступ к своей внешней области функций, в JavaScript это называется замыканием.
Например:
function outer (){
let counter = 0;
function inner (){
counter++;
return counter;
}
return inner
}
const result = outer()
function inner (){
counter++;
return counter;
}
Таким образом, JavaScript каким-то образом запоминает предыдущее counterзначение и выполняет математическую операцию.
Вы можете спросить, как Js это делает?
Когда функция возвращает функцию, она возвращает не только функцию, но и лексическую область видимости этой функции. Все те переменные, данные, которые связаны с этой возвращаемой функцией как скрытое свойство вместе с этой возвращаемой функцией. Это скрытое свойство также называетсяBackpack
У этого рюкзака много названий:
- Закрыто из-за «переменной среды» (COVE)
- Ссылочные данные постоянной лексической области (PLSRD)
- Рюкзак
- Закрытие
Давайте рассмотрим другой пример:
function outer (){
let counter = 0;
function inner (){
counter++;
return counter;
}
return inner
}
const result = outer()
result() // 1
result() // 2
const anotherResult = outer()
anotherResult() // 1
anotherResult() // 2
Почему закрытия:
- Это помогает нам создать вспомогательную функцию, которая позволяет использовать такие мощные функции, как один раз и запоминание.
- Помогает нам в создании итераторов и генераторов , используя лексическую область видимости и замыкания.
- Многие шаблоны проектирования JavaScript, включая шаблон модуля, используют замыкание, сохраняя состояние приложения, не загрязняя глобальное пространство имен.
- Обратные вызовы и обещания полагаются на замыкания для сохранения состояния в асинхронном мире JavaScript.

![В любом случае, что такое связанный список? [Часть 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































