@Opelale

Почему переменная, объявленная при первом вызове функции доступна в последующих вызовах?

Здравствуйте!
Читаю главу "Декораторы и переадресация вызова" на learn.javascript. Там есть такой пример:

function slow(x) {
  // здесь могут быть ресурсоёмкие вычисления
  alert(`Called with ${x}`);
  return x;
}

function cachingDecorator(func) {
  let cache = new Map();

  return function(x) {
    if (cache.has(x)) {    // если кеш содержит такой x,
      return cache.get(x); // читаем из него результат
    }

    let result = func(x); // иначе, вызываем функцию

    cache.set(x, result); // и кешируем (запоминаем) результат
    return result;
  };
}

slow = cachingDecorator(slow);

alert( slow(1) ); // slow(1) кешируем
alert( "Again: " + slow(1) ); // возвращаем из кеша

alert( slow(2) ); // slow(2) кешируем
alert( "Again: " + slow(2) ); // возвращаем из кеша


Поймал себя на мысли, что не понимаю, почему переменная cache, которая объявляется в функции cachingDecorator, после первого её вызова не удаляется из памяти и при последующем вызове этой функции вместо неё снова не создаётся новый пустой Map. Почему не происходит её переопределение при каждом вызове?
  • Вопрос задан
  • 143 просмотра
Решения вопроса 1
Ты функцию cachingDecorator один раз вызываешь дальше ты вызываешь результат, который она тебе отдала (return function(x))
Почитай про Lexical scoping
https://developer.mozilla.org/en-US/docs/Web/JavaS...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
КРАФТТЕК Санкт-Петербург
от 60 000 до 80 000 ₽
Brightdata Тель-Авив
от 5 500 до 6 500 $
Rocket Брянск
от 60 000 до 100 000 ₽
23 мая 2024, в 09:22
150000 руб./за проект
23 мая 2024, в 07:43
2800 руб./за проект
23 мая 2024, в 07:18
10000 руб./за проект