Логичность шаблона «объявили и вызвали» в JS

Вчера в комменариях возникло обсуждение семантики синтаксиса «!function () {}()». Мне так кажется, что семантика здесь побоку, использовать функцию для создания зоны видимости — уже костыль (в JS 1.7 есть конструкция «let» для этого), но мне тут подумалось, что ведь можно сделать эту конструкцию семантичной, если использовать забытую конструкцию «with»:
with (function () {
    // тело функции
}) call();
На мой взгляд, весьма и весьма семантично. Что скажете?
26 апреля 2012 09:19

art (инкогнито)
26 апреля 2012, 14:36

The with statement is forbidden in strict mode (see §5.7.3) and should be considered
deprecated in non-strict mode: avoid using it whenever possible. JavaScript code that
uses with is difficult to optimize and is likely to run more slowly than the equivalent
code written without the with statement.
David Flanagan — Javascript The Definitive Guide 6th Ed.

bolk (bolknote.ru)
26 апреля 2012, 15:10, ответ предназначен art

Это просто потому, что вот таким образом его ещё не использовали. С «with» действительно есть проблемы в общем случае. В частностях по-разному может быть.

PastorGL (инкогнито)
26 апреля 2012, 22:42

Остроумно на грани гениальности. Вполне достойно прямиком отправиться в комитет по стандартизации JS :)

ixth (инкогнито)
27 апреля 2012, 00:51, ответ предназначен bolk (bolknote.ru):

Боже, Евгений, объясните как это работает. call - это вызов метода?

bolk (bolknote.ru)
27 апреля 2012, 06:27, ответ предназначен ixth

Да, вызов метода функции (функция — объект в JS).

Ваше имя или адрес блога (можно OpenID):

Текст вашего комментария, не HTML:

Кому бы вы хотели ответить (или кликните на его аватару)