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

Давайте разберемся на примере:

function outer() {
  const name = "John";

  function inner() {
    console.log("Hello, " + name + "!");
  }

  return inner;
}

const greetJohn = outer();
greetJohn(); // logs "Hello, John!"

В этом примере external определяет имя переменной и функцию inner, которая регистрирует приветствие, включающее переменную name. Затем external возвращает внутреннюю функцию.

Переменной welcomeJohn присваивается возвращаемое значение внешней функции, которая является внутренней функцией. Когда мы вызываемgreetJohn(), он регистрирует Hello, John! даже несмотря на то, что переменная имени больше не находится в области видимости, потому что у внутреннего есть доступ к переменным, определенным во внешнем, когда он был создан.

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

Я надеюсь, что эта статья рассеет все ваши сомнения по поводу замыканий в javascript.