Закрытия в Javascript

Переменные JavaScript могут принадлежать к локальной или глобальной области видимости.

Глобальные переменные можно сделать локальными (приватными) с помощью закрытий.

Глобальная переменная

Функция может получить доступ ко всем переменным, определенным внутри функции, следующим образом:-

 function calculateNum() {
  let a = 4;
  return a * a 
}

Войти в полноэкранный режим Выйти из полноэкранного режима

Но функция также может получить доступ к переменной вне функции следующим образом:-

let i = 4; 
function calculateNum() {
return i * i
}
Войти в полноэкранный режим Выйти из полноэкранного режима

В приведенном выше примере a является глобальной переменной.
В веб-странице глобальная переменная принадлежит объекту окна.

В первом примере a — локальная переменная.

Локальная переменная может использоваться только внутри функции, в которой она определена. Она скрыта от других функций, которые не могут ее использовать.

Глобальные и локальные переменные с одинаковым именем — это разные переменные. Изменение одной из них не приводит к изменению другой.

Пример закрытия

const add = (function () {
  let counter = 0;
  return function () {counter += 1; return counter}
})();

add();
add();
add();

Вход в полноэкранный режим Выход из полноэкранного режима

Пример поясняется

  • переменная add присваивается возвращаемому значению самовызывающейся функции

  • Самовызывающаяся функция запускается только один раз. Она устанавливает счетчик в (0) и возвращает функциональное выражение.

  • Таким образом, add становится функцией. Самое замечательное, что она может получить доступ к счетчику в родительской области видимости.

  • Это называется замыканием JavaScript. Оно позволяет функции иметь «частные» переменные.

  • Счетчик защищен областью видимости анонимной функции и может быть изменен только с помощью функции add.

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

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *