НО ВОПРОС ВСЕ ТАКИ ЕСТЬ!
var counter = makeCounter();
var counter2 = makeCounter();
alert( counter() ); // 1
alert( counter() ); // 2
alert( counter() ); // 3
alert( counter2() ); // 1
Представим что внутри функции makeCounter есть функция, благодаря этому интерпретатор не может удалить объект LexicalEnvironment этой функции, он хранит его в памяти, но что тогда черт возьми происходит когда мы вызываем еще раз эту функцию, в память помещается еще один такой объект или как вообще??? Тут просто ступор!!!