Pull to refresh

Эмуляция блокировки видимости с помощью with в JavaScript

Reading time1 min
Views961

За нахождение хорошей фотографии спасибо 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 Да, у меня проблемы с русским языком, просто взгляните на возраст и поймете.
Tags:
Hubs:
+37
Comments36

Articles