Последние учебники веб-разработки
×

JS Руководство

JS ГЛАВНАЯ JS Введение JS Куда JS Вывод JS Синтаксис JS Заявления JS Комментарии JS переменные JS операторы JS арифметика JS присваивание JS Типы данных JS функции JS Объекты JS Объем JS Мероприятия JS Строки JS Методы струнных JS чисел JS Методы Number JS математический JS Даты JS Форматы даты JS Методы Дата JS Массивы JS Методы массивов JS Booleans JS Сравнения JS условия JS переключатель JS петля For JS В то время как Loop JS Ломать JS Тип преобразования JS RegExp JS ошибки JS отладка JS Подъемно JS Строгий режим JS Гид по стилю JS Лучшие практики JS Ошибки JS Представление JS Зарезервированные слова JS JSON

JS формы

Формы проверки Формы API

JS объект

Определения объектов Свойства объекта Методы объекта Прототипы объектов

JS функции

Определения функций Функциональные параметры Функция Призвание Функция Затворы

JS HTML DOM

DOM вступление DOM методы DOM Документ DOM элементы DOM HTML DOM CSS DOM Анимации DOM Мероприятия DOM EventListener DOM навигация DOM Вершины DOM Nodelist

JS браузер BOM

JS Window JS Screen JS Location JS History JS Navigator JS Popup Alert JS Timing JS Cookies

JS Примеры

JS Примеры JS HTML DOM JS HTML вход JS HTML Объекты JS HTML Мероприятия JS браузер JS викторина JS Резюме

JS Рекомендации

JavaScript Объекты HTML DOM Объекты


 

JavaScript Closures


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

Частные переменные могут быть возможным с замыканиями.


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

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

пример

function myFunction() {
    var a = 4;
    return a * a;
}
Попробуй сам "

Но функция может также получить доступ к переменным , определенные вне функции, как это:

пример

var a = 4;
function myFunction() {
    return a * a;
}
Попробуй сам "

В последнем примере глобальная переменная.

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

Глобальные переменные могут быть использованы (и изменены) всеми скриптами на странице (и в окне).

В первом примере является локальной переменной.

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

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

Переменные , созданные без ключевого слова вар, всегда глобальные, даже если они будут созданы внутри функции.


Переменная 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. Это позволяет функция иметь "частные" переменные.

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

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