Skip to content

[js] 第408天 实现一个函数记忆的方法 #2437

Open
@haizhilin2013

Description

@haizhilin2013
Collaborator

第408天 实现一个函数记忆的方法

3+1官网

我也要出题

Activity

forever-z-133

forever-z-133 commented on May 28, 2020

@forever-z-133

同步运算结果缓存,这个就老生常谈了:

function useCache(func) {
  var cache = {};
  return function() {
    var key = arguments.length + Array.prototype.join.call(arguments);
    if(cache[key]) return cache[key];
    cache[key] = func.apply(this, arguments);
    return cache[key];
  }
}

但单例模式算不算函数记忆呢,异步缓存走 await 算不算呢

hyj443

hyj443 commented on Oct 20, 2021

@hyj443
function cacheFunc(fn) {
  const cache = Object.create(null)
  return (...arg) => {
    const key = arg.length + arg.join(",") // 根据传参构建唯一的key
    if (cache[key]) { // 命中缓存,直接返回缓存值
      return cache[key]
    }
    return cache[key] = fn(...arg) // 否则,执行fn,保存一下
  }
}
function a(n) {
  console.log("执行了a函数");
  return n
}
let newA= cacheFunc(a)

newA(6)
newA(6)
newA(6)

结果只有第一次newA(6)调用才会打印"执行了a函数",之后的newA(6)调用只会返回6

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    jsJavaScript

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @haizhilin2013@forever-z-133@hyj443

        Issue actions

          [js] 第408天 实现一个函数记忆的方法 · Issue #2437 · haizlin/fe-interview