GuardCat, скобки нужны, чтобы интерпретатор отличил, является ли это объявлением функции (Function declaration) или функцией-выражением (Function expression). Поскольку аргументом оператора группировки «()» должно быть выражение, то интерпретатор «понимает», что это не объявление функции, а именно анонимная функция-выражение. Как расставить скобки — все равно
(function () {})();
(function () {
}());