Достаточно давно Дуглас Крокфорд выработал некие соглашения по оформлению кода, которые он использует на практике и призывает использовать других программистов.
Чтобы удобно и быстро можно было делать проверку кода на соответствие этим соглашениям, он написал приложение JSLint, которое анализирует код и дает подсказки о том, как следует исправить проблемные места.
Самое интересное в этом приложении, что туда постоянно добавляются новые правила. Другими словами, для программы, которая год назад прекрасно валидировалась им, сегодня можно получить массу предупреждений и даже ошибок.
Так в моем коде появились ошибки типа: «Move the invocation into the parens that contain the function» и «Wrap the entire immediate function invocation in parens». Конечно, исправлять старый и работающий код не было нужды, а вот для новых разработок было бы интересно устранить эти сообщения.
JSLint выдает эти ошибки, когда встречает замыкание
(function () {})();
И предлагает оформить его как
(function () {}());
Действительно, первая пара скобок не нужна с точки зрения синтаксиса, но указывает на то, что данная функция должна выполниться немедленно. Вторая пара скобок в данном случае содержит в себе аргументы, которые будут переданы функции.
Крокфорд предлагает обернуть в первую пару скобок функцию и аргументы, которые ей будут переданы.