Почему return функции без скобок — выполняет ее, а не возвращает объект функции?
var counter = makeCounter();
 вот тут возвращается обьект функции.
counter();
а тут он выполняется
В чем проблема то?
Потому что () означает "выполнить функцию". Это может быть как именнованная функция, так и переменная содержащая функцию.function foo1(){ console.log('foo1'); }
var foo2 = function (){ console.log('foo2'); }
foo1();
foo2();
Результат будет одинаковый. В вашем случае в переменной counter находится функция - поэтому она и выполняется при попытке её вызвать как функцию.var counter = makeCounter();
Разворачиваем:var counter = (function makeCounter() {
  function counter() {
    alert('test');
  };
  return counter;
})();
Далее:var counter = (function makeCounter() {
  return function counter() {
    alert('test');
  };
})();var counter = function() { alert('test'); };