Что такое замыкание в js?

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

Все переменные внутри функции – включая её параметры – становятся свойствами специального внутреннего объекта LexicalEnvironment, который создаётся в момент запуска функции. Когда функция начинает выполняться, для неё формируется это лексическое окружение (LexicalEnvironment), где хранятся все ее локальные переменные и ссылка на внешнее лексическое окружение, то есть на ту область видимости, в которой функция была объявлена. Эта ссылка образует цепочку областей видимости, которая позволяет функции получать доступ не только к своим собственным переменным, но и к переменным из внешних областей. Собственно,замыкание и возникает благодаря этому механизму. Когда внутренняя функция сохраняет ссылку на лексическое окружение внешней функции, даже после того, как внешняя функция завершила своё выполнение, её лексическое окружение продолжает существовать в памяти. Это происходит потому, что внутренняя функция продолжает удерживать на него ссылку через цепочку областей видимости. Таким образом,замыкание –способность функции "запоминать" окружение, в котором она была создана, независимо от того, где и когда она будет вызвана в дальнейшем.

#javascript #frontenddevelopment #собеседования #замыкания #вопросы_для_собеседования #войтивайти