Ф-ция makeCounter вызывается ОДИН раз. Соответственно ЕДИНОЖДЫ объявляется и инициализируется единицей переменная count . Данная переменная является частью области видимости созданной при вызове makeCounter. Данная функция возвращает другую функцию (назовем ее f для удобства)
return function() {
return count++;
};
которая так же имеет доступ к этой области видимости в которой была определена переменная count. Вот и все. Далее вы вызываете эту функцию (f) много раз и каждый раз она работает все с той же переменной count.
Попробуйте сделать вот так :
var counter = makeCounter(); // присвоили функцию у которой своя СОБСТВЕННАЯ область видимости
var counter2 = makeCounter(); // присвоили функцию у которой своя СОБСТВЕННАЯ отличная от предыдущей область видимости
появится две области видимости и у каждой будет свой отдельный count.
попробуйте повызывать
console.log( counter());
console.log( counter2());