Пример:
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) );
Правильно же я понимаю, что тут
alert( slow(1) );
происходит вызов функции
slow(x)
с аргументом 1?
Если так, то почему они тут пишут
alert( "Again: " + slow(1) );
-
возвращаем из кеша.
Из какого кеша?
Если вызывалась функция
slow(x)
, в которой нет никакого кеширующего функционала, а он есть в функции
cachingDecorator
, которая НИ РАЗУ не вызывалась.
И что такое
slow = cachingDecorator(slow);
?
Это тоже самое, что
let slow = cachingDecorator(slow);
?
Или при вызове
slow(1)
происходит НЕ вызов функции
function slow(x)
, а как раз вызов
slow = cachingDecorator(slow);
?
Если да, то в чем логика? Что за бред? Или я чего-то не знаю базового?
Ведь очевидно же, что при slow(1) происходит вызов slow(x) с параметром 1.
СПАСИБО ЗА ПОМОЩЬ!