Локальные переменные и JS
Читал тут по диагонали стандарт ECMAScript и подумалось мне, что сэмулировать локальные переменные (да, я осознаю, что это свойства объекта) можно вот так:
var a = 10;
with ( { a : 20 }) {
alert(a);
}
alert(a);Ожидаемый результат: сначала код выведет «20», потом — «10». Я ещё не задумывался над тем насколько это практично и изящно, просто придумалось.
Кстати, обратите внимание, что следующий код выведет «30», «30», «10», «30»:
var a = 10, b = 10;
with ({a:20}) {
var a = 30, b = 30;
alert(a);
alert(b);
}
alert(a);
alert(b);Добавлено 10 ноября 10:55: в комментариях
Комментарии 6
(function(){
var a = 11, b = 22;
alert(a);
alert(b);
})();
alert(a);
alert(b);
Если бы это было встроенной возможностью языка, то было бы практично и изящно.
Если бы так например:
a = 10;
{ a = 5; alert(a); }
alert(a);
Ну, я ничего не думал в комментариях. Мне просто with не нравится с тех пор, когда упаковщики JS не могли его правильно обрабатывать. И вообще with
Да я понимаю чем он неприятен — никогда толком не знаешь что внутри происходит :) Если в объекте нет