function slow(x) {
// здесь могут быть ресурсоёмкие вычисления
alert(`Called with ${x}`);
return x;
}
function cachingDecorator(func) {
let cache = new Map();
return function(y) {
if (cache.has(y)) { // если кеш содержит такой x,
return cache.get(y); // читаем из него результат
}
let result = func(y); // иначе, вызываем функцию
cache.set(y, result); // и кешируем (запоминаем) результат
return result;
};
}
let slowNew = cachingDecorator(slow);
alert( slowNew(1) ); // slow(1) кешируем
alert( "Again: " + slowNew(1) ); // возвращаем из кеша
alert( slowNew(2) ); // slow(2) кешируем
alert( "Again: " + slowNew(2) ); // возвращаем из кеша
Мне не совсем понятно, как так получается, что цифра, которую я напишу в slowNew, будет являться аргументом "y", то есть цифра каким-то образом уходит во вложенную функцию, хотя у cachingDecorator есть всего один аргумент func, в который я уже передал функцию "slow". Каким образом JavaScript понимает, что цифра, которую я написал в качестве аргумента slowNew, является аргументом "y"? Надеюсь объяснил понятно :) И подскажите, что можно почитать на данную тему, чтобы лучше понимать, как работают аргументы функций?