JavaScript: Прячем переменные от глобальной области видимости

2011-01-17

Часто на веб-страничку навешивается очень много скриптов и сторонних библиотек. От этого становится сложно отследить все внешние переменные, а также, перестраховаться от создания в будущем новых переменных с таким же именем. Мало того что нужно уделять много времени и творчества на создание уникальных, длинных имён переменных, так еще к тому же — эти переменные будут висеть в памяти, засоряя её, и еще при этом — создавать угрозу конфликтов.

Решить эту проблему очень просто.

Метод 1:
Идея такова: Создаем анонимную функцию, в тело которой помещаем наш код, и сразу выполняем её.

Пример:

(function(){ // наша анонимная функция
// Далее следуют код, который не повлияет на глобальную область видимости
var myVar = 123;
// ...
alert(myVar); // 123
})();
alert(myVar); // ошибка: myVar is not defined

Поскольку функция анонимна, она тоже не засоряет область видимости.
Таким образом мы получим очень удобный, красивый, безопасный код. А главное — имена переменных можно придумывать, не заботясь о других.

Метод 2:
Еще один распространённый метод решения данной проблемы — это не создавать новые глобальные переменные, а вместо них создавать свойства какого-то уникального объекта. Так поступают многие известные яваскриптовыми фреймворки.

Пример:

var myUniqFunctional = {
myVar1: 123,
myVar2: "abc"
};
myUniqFunctional.myVar3 = true;
// Пример использования:
alert(myUniqFunctional.myVar1); // 123

В этом случае все наши переменные (свойства объекта) доступны в глобальной области, но только через некий идентифицирующий объект. Обратите внимание, что уникальность имени этого объекта мы тоже должны обеспечить. Но это лучше, чем обеспечивать уникальность большого количества внешних переменных в глобальной зоне видимости.

В заключении хочу сказать, что 1-й метод с анонимными функциями мне нравится намного больше, потому что код получается более компактный и независимый.



Добавить комментарий