Почему jQuery обертывает себя функцией?
Я читал источник jQuery, и мне было интересно, почему весь исходный файл был обернут в автономную функцию.
(function(){
...
})();
Это что-то, что помогает не загрязнять глобальное пространство имен? Почему он работает и как он работает?
Ответы
Ответ 1
Он использует тело функции для предоставления своей собственной области, а не для введения большого количества глобальных символов, которые могут быть случайно изменены внешним кодом.
Eg.
(function (){
var someConstantValue = ...;
myCoolFunction = function(){ return someConstantValue * 5; }
})();
myCoolFunction();
Если область действия не была введена, можно было бы случайно изменить someConstantValue
, введя другой код (или другую библиотеку)
someConstantValue = someOtherValue; // this won't change the behaviour of myCoolFunction
Ответ 2
Вы правы, что это предотвратит загрязнение глобального пространства имен.
Все переменные и функции, которые нужны jQuery, создаются внутри этой функции, что заставляет эти функции и переменные истекать в глобальное пространство имен. Если вы посмотрите на этот блок кода:
var jQuery = window.jQuery = window.$ = function( selector, context ) {
// The jQuery object is actually just the init constructor 'enhanced'
return new jQuery.fn.init( selector, context );
};
он фактически соединяет инициализатор jQuery с внешним миром, устанавливая window.jQuery и window. $в функцию инициализации. Это единственное место, где переменные внутри функции-обертки доступны непосредственно вне оболочки.
Обратите внимание, что вся функция завернута как функция (function,,)(), которая будет выполнять эту функцию сразу после загрузки файла.