当函数变量发生变化时,Memoize失败

时间:2016-12-11 22:11:49

标签: javascript lodash memoization



var fibo = function (x) {
  console.log(x);
  if (x === 1) return 1;
  if (x === 2) return 2;
  return fibo(x - 1) + fibo(x - 2);
};

// fibo = _.memoize(fibo);
var fibom = _.memoize(fibo);
console.log(fibom(5));

<script src="https://cdn.jsdelivr.net/lodash/4.17.2/lodash.min.js"></script>
&#13;
&#13;
&#13;

为什么memoize在分配给原始函数变量名时(如注释掉的代码中所示)有效,但在分配给新变量时却没有?

2 个答案:

答案 0 :(得分:4)

当您将memoized函数分配给新变量时,递归调用仍将转到未记忆的版本。您需要像在注释掉的代码中那样覆盖引用。

答案 1 :(得分:1)

因为递归函数调用原始的非memoized函数而不是memoized函数。

如果您指定/覆盖fibo函数,原始函数内的fibo调用将调用新的memoized函数并且它可以正常工作。