ogurchik,
потому что catCounter возвращает функцию, которая генерирует число а не число.
var catCounter = function () {
var counter = 0;
return function () {
return counter++;
}
};
alert(catCounter()());
В первом варианте вы получили функцию и пытаетесь её показать алертом.
Во втором вы получили функцию, потом у неё получили число, которое показываете алертом.