
За нахождение хорошей фотографии спасибо ant99 а также фотографу.
Некоторое время назад я писал о том, как блокировать видимость в JavaScript с помощью конструкции let. Как оказалось из комментариев, let (как и JavaScript 1.7-1.8.5) поддерживается только браузерами на основе обезьянок и Rhino. Меня постигло разочарование, но минут 15 назад я придумал (хотя это громко сказано, наверное, и до меня было уже придумал кто-то) костыль для не такого красивого, но тем не менее рабочего кода. Он использует конструкцию with (да, я знаю, что она причислена к Bad Parts из-за ненужности и неэффективности, но вот прямо сейчас я опровергну первое утверждение).
Я рассмотрю простой пример.
С помощью конструкции let это выглядит так:
foo = 10; bar = 20; let(foo=20,bar=10){ console.log(foo,bar); //20 10 } console.log(foo,bar); //10 20
И с помощью with:
foo = 10; bar = 20; with({ foo:20, bar:10 }){ console.log(foo,bar); //20 10 } console.log(foo,bar); //10 20
При этом изменение в «области видимости» не приводят к изменению внешней области. Например:
foo = 10; with({ foo:20 }){ foo = 200; } console.log(foo); //10

Итак, with не такой мощный инструмент, как let, но зато он поддерживается большинством браузеров.
Хочу напомнить, что я не иду против управления областью видимости с помощью функции, но иногда функцию для небольшой области видимости просто слишком громоздко.
P.S. Я бы мог рассмотреть больше примеров, но не считаю нужным делать это, так как они все одинаковы принципиально.
P.S.2 За орфографию и более приятный для чтения стиль спасибо хабраюзеру ertaquo
P.S.3 Да, у меня проблемы с русским языком, просто взгляните на возраст и поймете.