Названия этих конструкций closure
и namespace
.Закрытие - это функция, которая поддерживает ссылки на переменные вне своей области.
Обратите внимание, что теперь вы можете получить доступ к переменной APP
, и она будет корректно обновлена:
(function($) {
var APP = {};
$(function() {
APP.header = $("#header");
APP.footer = $("#footer");
});
// "APP.header" and "APP.footer" are defined later in the code
})(jQuery);
Есливы использовали локальные переменные, вы не могли получить его эффект:
(function($) {
$(function() {
var header = $("#header");
var footer = $("#footer");
});
// "header" and "footer" are long gone local variables
})(jQuery);
Обратите внимание, что вы можете использовать глобальные переменные (технически свойства window
) здесь:
(function($) {
$(function() {
header = $("#header");
footer = $("#footer");
});
// "header" and "footer" are accessible global variables
})(jQuery);
Но это плохая практика по ряду причин (в частности, возможные коллизии и неожиданно определенные переменные).Итак, вы настроили так называемое пространство имен - переменную типа APP
для хранения ваших данных, которые должны быть «глобальными».
Что касается конкретной полезности этого замыкания в вашем случае, обратите внимание, чтоон окружен $()
.Это способ jQuery сказать «запустите эту функцию, когда DOM завершит загрузку».DOM необходимо завершить загрузку, прежде чем пытаться получить доступ к $('#header')
и $('#footer')
, чтобы убедиться, что эти элементы действительно существуют в DOM.Но так как это обратный вызов, он будет выполнен позже , поэтому необходимо закрытие для сохранения ссылки на APP
, когда он в конце концов будет вызван.