@baranovstas

Почему значение переменной изменилось до вызова функции?

Всем привет. Дано:
function outerFunc() {
  let counter = 0;
  return function innerFunc() {
    return counter++;
  }
}
const innerFunc = outerFunc();
console.dir(innerFunc); // 1-ый вывод
innerFunc();
innerFunc();
console.dir(innerFunc); // 2-ой вывод

61e922c0394d9000881589.png
Почему при первом выводе в консоль отображается, что переменная counter во внешнем лексическом окружении innerFunc уже со значением 2? Если ДО первого вывода в консоль я НЕ вызывал innerFunc и, как следствие, не повышал значение переменной? Со вторым выводом вопросов нет, всё, как надо, потому что я два раза вызвал innerFunc.
  • Вопрос задан
  • 74 просмотра
Решения вопроса 1
dollar
@dollar
Делай добро и бросай его в воду.
Потому что консоль получает значение counter и кеширует его в тот момент, когда вы кликаете на [[Scopes]].

Проведите простой эксперимент:
  1. Вручную console.dir(innerFunc); Но не раскрывайте пока что.
  2. Несколько раз вручную innerFunc();
  3. Раскройте [[Scopes]] и посмотрите значение. Закройте.
  4. Ещё несколько раз вручную innerFunc();
  5. Снова раскройте [[Scopes]] и посмотрите значение.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы