Почему возвращается только return x без alert(...)?

Есть код:
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.set(x, result);в кеш он записывает result равный { alert(`Called with ${x}`); return x; }
Но почему alert( "Again: " + slow(1) ); возвращает с качестве значения slow(1) цифру 1(т.е. x), без alert(`Called with ${x}`);?
Ведь в кеш записывается весь resultравный телу функции slow(x), т.е. это
{
   alert(`Called with ${x}`);
  return x;
}

Помогите, пожалуйста понять.
  • Вопрос задан
  • 107 просмотров
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Ведь в кеш записывается весь result равный телу функции
С чего вы это взяли вообще? Что функция вернула, то и записывается в кеш. Вы же не саму её записали, а результат её вызова. Alert к этому результату не имеет никакого отношения и всегда возвращает undefined.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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