Переменные JavaScript могут принадлежать к локальной или глобальной области видимости.
Частные переменные могут быть возможным с замыканиями.
Глобальные переменные
Функция может получить доступ ко всем переменным , определенные внутри функции, как это:
Но функция может также получить доступ к переменным , определенные вне функции, как это:
В последнем примере глобальная переменная.
В веб-странице, глобальные переменные относятся к объекту окна.
Глобальные переменные могут быть использованы (и изменены) всеми скриптами на странице (и в окне).
В первом примере является локальной переменной.
Локальная переменная может использоваться только внутри функции, где она определена. Он скрыт от других функций и другого кода сценариев.
Глобальные и локальные переменные с одинаковыми именами являются различными переменными. Изменение одного, не изменяет другой.
Переменные , созданные без ключевого слова вар, всегда глобальные, даже если они будут созданы внутри функции.
Переменная Lifetime
Глобальные переменные живут до тех пор, как приложение (ваше окно / ваш веб-страницы) живет.
Локальные переменные имеют короткую жизнь. Они создаются при вызове функции и удаляется при выходе из функции.
Контратака Дилемма
Предположим, вы хотите использовать переменную для подсчета что-то, и вы хотите этот счетчик, чтобы быть доступным для всех функций.
Вы можете использовать глобальную переменную и функцию для увеличения счетчика:
пример
var counter = 0;
function add() {
counter += 1;
}
add();
add();
add();
// the counter is now equal to 3
Попробуй сам " Счетчик должен быть изменен только add() функции.
Проблема заключается в том , что любой скрипт на странице можно изменить счетчик, без вызова add() .
Если я объявляю счетчик внутри функции, никто не сможет изменить его без вызова добавить ():
пример
function add() {
var counter = 0;
counter += 1;
}
add();
add();
add();
// the counter should now be 3, but it does not work !
Попробуй сам " Это не работает! Каждый раз , когда я называю add() функцию, счетчик устанавливается равным 1.
Внутренняя функция JavaScript может решить эту проблему.
JavaScript Вложенные функции
Все функции имеют доступ к глобальной области видимости.
В самом деле, в JavaScript, все функции имеют доступ к области действия "над" ними.
JavaScript поддерживает вложенные функции. Вложенные функции имеют доступ к области действия "выше" них.
В этом примере внутренняя функция plus() имеет доступ к переменной счетчика в родительской функции:
пример
function add() {
var counter = 0;
function plus() {counter += 1;}
plus();
return counter;
}
Попробуй сам " Это могло бы решить эту дилемму встречный, если бы мы могли достичь plus() функцию с внешней стороны.
Нам также необходимо найти способ выполнить счетчик = 0 только один раз.
Нам нужно закрыть.
JavaScript Затворы
Помните самоосуществляющийся функции? Что делает эта функция делать?
пример
var add = (function () {
var counter = 0;
return function () {return counter += 1;}
})();
add();
add();
add();
// the counter is now 3
Попробуй сам " Пример Разъяснения
Переменная добавить присваивается возвращаемое значение самостоятельного вызова функции.
Самоосуществляющийся функция запускается только один раз. Она устанавливает счетчик на ноль (0), и возвращает выражение функции.
Таким образом, дополнение становится функцией. "Замечательно" состоит в том, что он может получить доступ счетчик в родительской области.
Это называется замыкание JavaScript. Это позволяет функция иметь "частные" переменные.
Счетчик защищен объем анонимной функции, и может быть изменен только с помощью функции добавления.
Замыкание это функция, имеющая доступ к родительской области, даже после того, как материнская функция закрыта.