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

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

with (function () {
    // тело функции
}) call();

На мой взгляд, весьма и весьма семантично. Что скажете?

Поделиться
Отправить
5 комментариев
art

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.

Евгений Степанищев (bolknote.ru)

Комментарий для art:

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

PastorGL

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

ixth

Комментарий для Евгения Степанищева:

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

Евгений Степанищев (bolknote.ru)

Комментарий для ixth:

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

Популярное