Замыкание — одна из основных важных концепций в JavaScript. Мы, как разработчики, должны знать о концепциях замыкания. но есть и другие разработчики, которые до сих пор не знают о замыкании или путаются с концепциями замыкания.

Введение

Согласно нашей документации MDN

Замыкание — это комбинация функции, связанной вместе (вложенной) со ссылками на ее окружающее состояние (лексическое окружение).

Что это определение говорит о замыкании — так это то, что с помощью замыкания вы можете получить доступ к внешней области действия функции, используя внутреннюю область действия функции.

Мы все знаем о функции в javascript, и теперь мы будем понимать концепцию лексического окружения в заключении.

Давайте возьмем в качестве примера известное имя, то есть Джон Доу 😂

const name = «Джон Доу»;

function helloWorld() {
console.log("Привет, мир!! Я", имя);
}

Привет, мир(); //Вывод: Привет, мир!! Я Джон Доу

Здесь вы объявили переменную в глобальной области видимости и можете использовать ее везде в коде. Итак, это работает, как вы можете видеть на выходе.

Другой пример здесь

function user() {
const userName = «Джон Доу»;
}
пользователь();

console.log("Привет, мир!! Я", userName);

//Вывод: Uncaught ReferenceError: имя пользователя не определено

Здесь вы получаете сообщение об ошибке, потому что userName отсутствует в глобальной области видимости. он находится внутри внутренней области действия функции user.

Я надеюсь узнать, что вы поняли концепцию лексического окружения, и давайте перейдем к основной теме, т.е. к закрытию.

Закрытие

начнем с примера. потому что мы как разработчик дадим больше смысла😃

function Greeting() {
const userName = «Джон Доу»;
return function GreetMsg() {
console.log («Добро пожаловать», userName);
};< br /> }
const displayMsg = Greeting();
console.log(displayMsg); //вывод: ƒgreetMsg() {}
console.log(displayMsg());//вывод: Добро пожаловать, Джон Доу

Как видите, displayMsg — это функция greetMsg. но главное здесь то, что в функции displayMsg еще нет упоминания о константе userName, при вызове она выводит ее значение.

Хотя мы извлекаем внутреннюю функцию и видим, что она одна, она всегда приходит со своим лексическим окружением (т. е. со своей собственной лексической областью видимости + лексической областью видимости своего родителя).

Я могу сказать, что —

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

Я надеюсь, что вы поняли концепцию закрытия и ее лексическое окружение, и если вы хотите узнать больше о концепции javascript. Тогда убедитесь, что вы следуете за мной.

И последнее, но не менее важное спасибо за чтение этой статьи.😊