Замыкания в 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