Найти в Дзене
JavaScriptPro100

Что такое замыкание(closure) в JavaScript?

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

Замыкание (closure) - это очень интересная вещь, но иногда его бывает трудно понять даже взрослым. Я попробую объяснить его так, чтобы детям было проще понять.

Допустим, у нас есть функция-родитель и функция-ребенок:

Пример кода функции замыкания(closure) в JavaScript.
Пример кода функции замыкания(closure) в JavaScript.

Функция-родитель, как и любая другая функция, может содержать в себе переменные. В данном случае это переменная parentVariable. Эта переменная доступна только внутри функции-родителя. Но что будет, если мы вернем функцию-ребенка из функции-родителя?

Вот что произойдет:

  1. Мы вызвали функцию parent(), и она вернула функцию child.
  2. Затем мы сохранили функцию child в переменную closure.
  3. Наконец, мы вызвали функцию closure().

И что мы видим на консоли? Мы видим строку "I am parent!". Но почему? Ведь переменная parentVariable определена только внутри функции-родителя!

Оказывается, что когда мы вызвали функцию parent(), она создала внутри себя замыкание. Замыкание - это механизм, позволяющий функции-ребенку иметь доступ к переменным функции-родителя. Таким образом, функция-ребенок child() обращается к переменной parentVariable, которая должна была быть "недоступна" для этой функции.

Надеюсь, я смог объяснить замыкания в JavaScript!

-2