Логичность шаблона «объявили и вызвали» в JS
Вчера в комменариях возникло обсуждение семантики синтаксиса «!function () {}()». Мне так кажется, что семантика здесь побоку, использовать функцию для создания зоны видимости — уже костыль (в JS 1.7 есть конструкция «let» для этого), но мне тут подумалось, что ведь можно сделать эту конструкцию семантичной, если использовать забытую конструкцию «with»:
with (function () {
// тело функции
}) call();
На мой взгляд, весьма и весьма семантично. Что скажете?
David Flanagan — Javascript The Definitive Guide 6th Ed.
Комментарий для art:
Это просто потому, что вот таким образом его ещё не использовали. С «with» действительно есть проблемы в общем случае. В частностях по-разному может быть.
Остроумно на грани гениальности. Вполне достойно прямиком отправиться в комитет по стандартизации JS :)
Комментарий для Евгения Степанищева:
Боже, Евгений, объясните как это работает. call — это вызов метода?
Комментарий для ixth:
Да, вызов метода функции (функция — объект в JS).