Замыкания в Javascript

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

Давайте посмотрим на пример закрытия:

function init() {
  var outerVariable = 'javascript'; 
  function display() {
    console.log(outerVariable);
  }
  display();
}
init();
Output:
javascript

Вы можете использовать инструмент разработчика браузера, чтобы увидеть, что при выполнении строки console.log(outerVariable) она имеет доступ к переменной, объявленной во внешней области функции.

Итак, во вложенной функции внутренние функции имеют доступ к переменной внешней функции. Причиной этого является закрытие формы функции в javascript, что означает, что она имеет ссылку на лексическое окружение, в котором она была создана. Поскольку функция display и переменная outerVariable находятся в одном и том же лексическом окружении.

Давайте посмотрим на другой пример:

(()=> { 
  function makeFunc() {
    var name = 'Javascipt';
    function displayName() {
      alert(name);
    }
    return displayName;
  }
  
  var myFunc = makeFunc();
  myFunc();
})();

Функция makeFunc() возвращает другую функцию, которая предупреждает имя переменной, объявленной как локальная переменная родительской функции. А myFunc — это экземпляр функции displayName. Это может быть странно, если сравнивать с другими языками программирования, так как можно подумать, что после выполнения функции makeFunc область имени переменной также уничтожается. Но это не так в Javascript. Причина этого та же, что и закрытие. Давайте посмотрим на этот пример через отладку в консоли разработчика.

Как видно из видео, myFunc сохраняет ссылку на переменную name в своей локальной области видимости даже после завершения выполнения внешней функции makeFunc.

Заключение

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

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

Ссылка

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures