Найти тему

Замыкание в JS.

Чтобы понять, что такое замыкание, рассмотрим пример:

function person() {let name = 'Peter';
return function displayName() {
console.log(name);
};
}
let peter = person();
peter(); // 'Peter'

Вызов функции peter() возвращает функцию displayName(). В свою очередь, функция displayName() имеет доступ к переменной name, которая расположена во внешней по отношению к ней функции. Таким образом, функция displayName() является замыканием.

Итак, замыкание — это функция, которая запоминает и имеет доступ к лексическому окружению, в котором она была создана (контекст выполнения).

Контекст выполнения — это место функции среди соседей и родителя. Код функции выполняется внутри контекста выполнения функции. Пример:

-2

Здесь создается переменная, находящаяся в глобальном контексте и функция, создающая свой контекст.

Лексическое окружение — это хранилище для данных в памяти и механизм для извлечения этих данных при обращении:

  • место переменной или функции в коде
  • Путь, позволяющий обратиться к внешнему компоненту. Ссылка на родителя.

Эти два понятия: лексическое окружение и контекст выполнения основные для понимания работы механизма замыкания.

Рассмотрим примеры:

function getCounter() {
let counter = 0;
return function inner() {
return counter++;
};
}
let count = getCounter();
console.log(count()); // 0
console.log(count()); // 1
console.log(count()); // 2

Лексическое окружение функции getCounter() состоит из переменной counter и функции inner(). Внешнее лексическое окружение — глобальные значения.

Результат работы функции getCounter(), то есть функция inner(), назначается записывается в переменную count.

Теперь мы вызываем функцию count() , которой, казалось бы нет и ее внутреннее лексическое окружение пусто. Но внешнее ссылается на переменную count (так как это родительский контекст) и записанную в ней функцию getCounter() .

И в результате, функция count() способна влиять на лексическое окружение getCounter() , изменяя переменную counter. (counter++).

Заключение.

Понять механизм работы замыканий очень важно, так как это залог успешного решения рабочих задач. Советуем уделить этой теме больше времени и внимания, поискать примеры и учебные задания, чтобы научится применять этот механизм на практике.