Показать сообщение отдельно
  #6 (permalink)  
Старый 04.08.2019, 11:46
Интересующийся
Отправить личное сообщение для Devero97 Посмотреть профиль Найти все сообщения от Devero97
 
Регистрация: 03.08.2019
Сообщений: 17

Сообщение от Белый шум Посмотреть сообщение
Давайте немного перепишем пример:
function makeCounter2(){
 let count = 0;
 function plus(){
  console.log(count++);
 }
 plus();
 plus();
 plus();
}

makeCounter2();

Так понятней как происходит запоминание увеличенного значения?

Замыкание делает абсолютно то же самое, только ссылка на внутреннюю функцию plus() попадает за пределы ф-ии makeCounter2() и может вызываться оттуда.

Но новый вызов makeCounter2() выведет три числа опять с нуля, т.к. первой строкой создаётся новая переменная count со значением ноль. Конструкция makeCounter()() работает ровно так же.

Вот тут и происходит недопонимание. Даже в том примере, который вы переписали, где происходит вызов функции plus() внутри функции makeCounter(). Функция plus() после вызова перезаписывает значение переменной или она только запоминает как-то у себя это значение?

Я понимаю, что она по лексическому окружению не видит локальной переменной и по ссылке идет в другое лексическое окружение, и при обнаружении нужной переменной она ее берет и изменяет в другом лексическом окружении или она эту переменную как-то изменяет у себя в лексическом окружении?
Ответить с цитированием