https://blog.csdn.net/weixin_30925411/article/details/100090840

f1('abc', 123, {b:3}); // 10, 1000s f1('abc', 123, {b:3}); // 10, 1000s

function cache(f) { let objCache = {} return function () { let curArgs = '' // 这里使用深复制会好点 for (let i = 0; i < arguments.length; i++) { if (Array.isArray(arguments[i])) { curArgs += arguments[i].join(',') } else if (typeof arguments[i] === 'object') { curArgs += JSON.stringify(arguments[i]) } else { curArgs += arguments[i] } }

// curArgs
if (curArgs) {
  return objCache[curArgs]
} else {
  objCache[curArgs] = f(curArgs)
  return objCache[curArgs]
}

} }

f2 = cache(f1); f2('abc', 123, {b:3}); // 10, 1000s f2('abc', 123, {b:3}); // 10, 0s

const memorize = function(fn) { const cache = {} // 存储缓存数据的对象 return function(...args) { // 这里用到数组的扩展运算符 const _args = JSON.stringify(args) // 将参数作为cache的key return cache[_args] || (cache[_args] = fn.apply(fn, args)) // 如果已经缓存过,直接取值。否则重新计算并且缓存 } }

const add = function(a, b) { console.log('开始缓存') return a + b }

const adder = memorize(add)

上次更新:
贡献者: 郑壮