В кругу начинающих программистов у замыканий сформировалась интересная репутация: все понимают, что эту тему нужно знать, но считают трудной, страшной и чуть ли не мистической.
В этом есть доля правды: замыкания — действительно один из самых мощных и важных инструментов в JavaScript, и владеть им должен каждый JS-программист.
Хорошая новость: если отбросить сложные слова, оказывается, что замыкание — это всего лишь функция, которую возвращает другая функция. Главное — разобраться, как использовать этот инструмент. Но обо всём по порядку.
Чтобы «разгадать» замыкания, для начала разберёмся с понятием «область видимости».
Всё, что вы объявляете в своём коде за пределами функций, условий и циклов*, оказывается в глобальной области видимости. А всё, что создаётся внутри блоков { … }, попадает в их локальную область видимости.
К глобальным переменным, функциям и константам можно обращаться и даже менять их из любой точки программы. Локальные объекты видны только внутри своего «родного»