【问题标题】:Memoize fails when function variable changed函数变量更改时,Memoize 失败
【发布时间】:2016-12-11 22:11:49
【问题描述】:

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>

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

【问题讨论】:

    标签: javascript lodash memoization


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      如果您分配/覆盖fibo 函数,则原始函数内的fibo 调用将调用新的记忆函数并且它可以工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-22
        • 1970-01-01
        • 2015-09-30
        • 1970-01-01
        • 2019-09-18
        • 1970-01-01
        • 2020-04-10
        • 2016-11-26
        相关资源
        最近更新 更多