Замыкание. На каком этапе происходит очистка lexical environment родительской функции?
function makeCounter() {
let count = 0;
return function() {
return count++;
}
}
let counter = makeCounter();
console.log(counter());
console.log(counter());
Мне непонятна эта фраза (цитатa с learn.javascript.ru):
Хотя функция
makeCounter()закончила выполнение некоторое время назад, ее лексическое окружение остаётся в памяти, потому что есть вложенная функция с[[Environment]], которая ссылается на нее.
Как это происходит?
При вызове функции в этой строке - let counter = makeCounter(); функция makeCounter выполняется: создаёт переменную count, затем браузер заходит во внутреннюю функцию: сначала происходит поиск переменной count во внутреннем лексическом окружении, потом, когда браузер понимает, что тут этой переменной нет, переходит по ссылке в лексическое окружение родительской функции. Вложенная функция выполнилась, произошел ее возврат. Все ее лексическое окружение удалилось. Потом браузер вернулся к родительской функции - тоже закончил ее выполнение т.к. есть return. Лексическое окружение родительской функции удалилось.
Как лексическое окружение родительской функции может оставаться если вложенная функция на него больше не ссылается?