Есть код:
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;
}
Помогите, пожалуйста понять.