Переменные 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.