Каждый новый вызов функции makeCounter() делает следующее:
1) создаёт локальную переменную
count и присваивает ей значение
0.
2) возвращает функцию, которой доступна только что созданная переменная
count.
Т.о., если вы несколько раз вызовете makeCounter() и сохраните её результат в разных переменных, то вы получите несколько независимых счётчиков:
let counter1 = makeCounter();
let counter2 = makeCounter();
А если вы не сохранили результат действия ф-ии makeCounter() в переменной, то соответствующий контекст сразу же теряется. Именно это и происходит при немедленном вызове
makeCounter()() (следующий такой же вызов делает всё заново, т.е. значение счётчика
count снова будет равно нулю).