Я просматривал статью о функции memoize в JavaScript и наткнулся на приведенный ниже пример
// same memoize function from before
const memoize = (fn) => {
let cache = {};
return (...args) => {
let n = args[0];
if (n in cache) {
console.log('Fetching from cache', n);
return cache[n];
}
else {
console.log('Calculating result', n);
let result = fn(n);
cache[n] = result;
return result;
}
}
}
const factorial = memoize(
(x) => {
if (x === 0) {
return 1;
}
else {
return x * factorial(x - 1);
}
}
);
console.log(factorial(5)); // calculated
console.log(factorial(6)); // calculated for 6 and cached for 5
Как описана / определена переменная args
в приведенной выше функции memoize? Может ли кто-нибудь помочь мне понять это?
const memoize = (fn) => {
let cache = {};
return (...args) => {
...
Из вызова кажется, что args
- это просто переменная для аргументов / параметров переданной функции fn
, но я не могу понять, почему и как работает приведенный выше блок кода.
Кроме того, есть ли название для этого кода / шаблона проектирования?
Редактировать Я прочитал о аргументах и остальных параметрах . Однако часть, которую я не понимаю, состоит в том, почему функция ...args
inside memoize становится параметрами из переданной функции fn
?
Не должен ли arguments
объект или параметр покоя ...args
представлять только параметры / аргументы из текущей функции memoize
, т.е. аргумент fn
? И в этом случае args[0]
это функция fn
?