Можно и так
(function() {
var answer = 42;
return function inner() {
return answer++;
};
})();
Скобки ставятся для того, чтобы интерпретатор понимал, что это функциональное выражение, а не просто функция.
В вашем же примере, это и так стало понятно из-за присваивания функции в переменную. т.е. можно писать и так
var getAnswer = function() {
var answer = 42;
return function inner() {
return answer++;
};
}();
но нельзя так
function() {
var answer = 42;
return function inner() {
return answer++;
};
}();
потому, что тут уже почти обычное определение функции, это не выражение. Поэтому люди и добавляют скобки, чтобы было выражение, и тогда уже можно сразу вызвать функцию.
По этой теме мне нравится пример с объектами.
{} + 2; // 2
2 + {}; // 2[object Object]
в первом случае, чтение идет слева направо, и интерпретатор попадает на {}, что не похоже на выражение, а значит это не объект а просто блок кода. Далее идет унарный оператор + и число, выходит +2.
Во втором случае, первым идет число а далее оператор, значит это уже выражение, и фигурные скобки будут поняты как часть выражения, а значит это объект.
Такой пример дает понимание работы интерпретатора, и поможет вам разобраться с вашей ситуацией.