Замыкание. На каком этапе происходит очистка 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. Лексическое окружение родительской функции удалилось.

Как лексическое окружение родительской функции может оставаться если вложенная функция на него больше не ссылается?


Ответы (0 шт):