【发布时间】:2019-06-08 06:36:38
【问题描述】:
我在看一篇关于 JavaScript 中 memoize 函数的文章,偶然发现了下面的例子
// 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
在上面的 memoize 函数中,args 变量是如何定义/产生的?谁能帮我理解一下?
const memoize = (fn) => {
let cache = {};
return (...args) => {
...
从调用来看,args 似乎只是传递函数fn 的参数/参数的变量,但我无法理解上面的代码块为什么以及如何工作。
另外,这个代码/设计模式有名字吗?
编辑我已经阅读了arguments 和rest parameters。但是我不明白的部分是 memoize 函数内部的...args 是如何成为传递函数fn 的参数的?
arguments 对象或剩余参数...args 不应该只代表来自当前函数memoize 的参数/参数,即fn 参数吗?在那种情况下args[0] 是函数fn?
【问题讨论】:
-
@AndrewL 编辑了这个问题,对我不太了解的部分进行了澄清。谢谢!
-
这是一个论点。它的定义就像
(fn)或(x)。您正在查看它:(...args)。这就是那里的定义。现在,新奇的东西是...语法......这就是所谓的“休息参数”。