了解JavaScript memoized函数中的输入值

时间:2014-05-30 13:08:22

标签: javascript memoization

我目前正在经历' Javascript:好的部分'道格拉斯·克罗克福德(Douglas Crockford)就是一个展示记忆化概念的例子。

var memoizer = function (memo, fundamental) {
  var shell = function (n) {
   var result = memo[n];
   if (typeof result !== 'number') {
     result = fundamental(shell, n);
     memo[n] = result;
   }
  return result;
  };
return shell;
};

var fibonacci = memoizer([0, 1], function (shell, n) {
   return shell(n - 1) + shell(n - 2);
});

我不明白的是,n的价值来自哪里?

2 个答案:

答案 0 :(得分:1)

n是一个输入。它没有"来"从您发布的代码中的任何位置,您必须提供一个值。

答案 1 :(得分:1)

在代码var shell = function (n)中,您指定在调用函数shell时,您将为其提供输入参数n。因此,如果您拨打shell(5)n将等于5,或您传入的任何其他号码。

您需要查看在每个函数调用中调用和返回的内容 - fibonacci设置为memoizer函数的返回值,memoizer返回shell函数接收n。因此,虽然您的示例代码中从未调用它,但最后您可以调用fibonacci(5),其中5是您的n。只需按照函数调用并返回。