Как работает это присвоение?
Можно и так(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.
Во втором случае, первым идет число а далее оператор, значит это уже выражение, и фигурные скобки будут поняты как часть выражения, а значит это объект.
Такой пример дает понимание работы интерпретатора, и поможет вам разобраться с вашей ситуацией.
 getAnswer сама становится этой функциейНе становится. В переменной getAnswer ссылка на функцию inner. Можно туда и что-то другое записать, вместо функции.var getAnswer = function() {
  var answer = 42;

  return function inner() {
    return answer++;
  };
}();

var anotherAnswer = getAnswer
getAnswer = -Infinity
Трюк со скобками - одна из форм записи самовызывающихся функций, они-же self-invoking functions или функциональные выражения. Делается для того, чтобы интерпретатор понял, что это не просто объявление функции, но ее еще и выполнить надо.
Форм записи у этого трюка не одна и не две.
Можно даже вот так: +function(){console.log('foo')}()
Здесь унарный плюс заставляет выполнить следующую за ним строку. (но не делайте так, те кто будут это читать вас проклянут)