Чтобы сохранить переменные вне глобальной области видимости, вы можете использовать анонимную функцию;Так как JavaScript имеет функциональную область видимости, все переменные, определенные в функции, являются локальными в области видимости.Это требует, чтобы вы объявляли переменные должным образом, но я бы настоятельно рекомендовал это при любых обстоятельствах.
(function () {
var a = 1;
alert("a is... " + a);
// do more stuff here
}());
alert(typeof a); // should be undefined
Пример: http://jsfiddle.net/AWDzV/
Это не относится конкретно к вашим with
заявление, но это, вероятно, лучший способ выполнить то, что вы ищете.Затем все, что вам нужно сделать, чтобы эмулировать поведение оператора with
, - это использовать переменную:
(function () {
var a = 1,
some_very_long_object_name = {a: 1, b: 2, c: 3},
obj = some_very_long_object_name;
obj.a = 2;
obj.b = 3;
obj.c = 4;
}());
alert(typeof a); // should be undefined
Не лучший код в мире, но он демонстрирует, что использование короткого имени переменнойзаменить длинное имя объекта работает отлично.В общем, я считаю, что это, вероятно, лучшее решение.
Конечно, любая переменная, которая не была должным образом объявлена, будет "просачиваться" в глобальную область видимости:
(function () {
a = 1; // notice the lack of "var" keyword
}());
alert(a); // should be 1
Пример: http://jsfiddle.net/AWDzV/1/
Но вы можете использовать JSLint , чтобы помочь отследить эту конкретную ошибку.Выполнение этого кода выше приводит к следующему сообщению об ошибке:
Ошибка: подразумеваемая глобальная: 2,4, предупреждение 4