首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我试图用javascript重写回忆录(用于下划线),有人能解释一下吗?

我试图用javascript重写回忆录(用于下划线),有人能解释一下吗?
EN

Stack Overflow用户
提问于 2017-03-01 04:46:10
回答 1查看 1.1K关注 0票数 0

我知道回忆录的目的是缓存值,这样代码就可以运行得更快,不必每次都重新计算相同的答案。我的问题来自于返回一个函数(我认为)。google chrome调试器在这里对我没有多大用处,因为每次我尝试运行这个回忆录函数时,它都会从阿格斯变量(我相信是第4行)一直延伸到分号。此外,结果总是返回一个空对象,而不是在结果中存储一个值。

我首先定义一个函数:

代码语言:javascript
复制
function add(a,b){
  return a+b;
}

这是我对回忆录功能的尝试:

代码语言:javascript
复制
  _.memoize = function(func) {

    var result = {};
    var flag = 0;
    var argus = Array.prototype.slice.call(arguments)
    return function() {
        
        if(result[key] === arguments){
            flag = 1
        }
        else if(flag = 0){
          result[argus] = func.apply(this, argus);
        }
        
      return result[argus];
    };
  };

我会通过执行_.memoize(add(2,5))来调用memoize,但是结果不会存储在结果对象中。

我已经接近让这个回忆录功能正常工作了吗?如果你们能在这里提供任何指导,我们将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-01 04:57:28

您所缺少的最大一点是首先对函数调用_.memoize,然后它返回一个新函数。您是在函数调用的结果(在本例中是数字7 )上调用它。

为了让它发挥作用,你需要重新安排一些事情。

还请注意,尝试使用数组本身作为对象的索引是不明智的。解决这一问题的一种方法是将参数数组转换为JSON,并将其用作results对象的索引:

代码语言:javascript
复制
function add(a, b) {
  console.log('Called add(' + a + ', ' + b + ')');

  return a + b;
}

var _ = {};

_.memoize = function(func) {
  var results = {};
  return function() {
    var args = Array.prototype.slice.call(arguments);
    var key = JSON.stringify(args);

    if (!(key in results)) {
      results[key] = func.apply(this, args);
    }

    return results[key];
  };
};

var madd = _.memoize(add);

console.log(madd(2, 4));
console.log(madd(9, 7));
console.log(madd(2, 4));

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42523396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档