Замыкания в JavaScript

Давайте теперь изучим понятие замыкание (closure). На самом деле вы уже знакомы с этим понятием, осталось только узнать правильную терминологию.

Итак, замыкание - это функция вместе со всеми внешними переменными, которые ей доступны. Или, другими словами, замыкание - это функция вместе со своим лексическим окружением.

В JavaScript чаще всего, говоря "замыкание функции", имеют ввиду не саму эту функцию, а именно ее внешние переменные. Если же какая-то функция получает переменную из своего лексического окружения, то говорят "переменная берется из замыкания".

Вспомним код, который мы сделали в предыдущем уроке:

javascriptfunction test() {
  let num = 1;
  
  return function() {
    console.log(num);
  }
}

let func = test();
func(); // выведет 1

В данном случае и можно сказать, что функция func получает значение переменной num из замыкания. Также можно сказать, что функция func хранит значение переменной num в замыкании.