// 这是个闭包函数,接收一个函数,可以把接收的函数转换成具有缓存能力的函数var memoize = function(f) { // 使用一个 cache 对象来进行缓存 var cache = {}; // 返回一个函数,这个函数就是具有缓存功能的 f 函数 return function() { // 缓存的 key 是通过 arguments 生成的 var arg_str = JSON.stringify(arguments); // 当有缓存的时候直接取缓存的,没缓存则只需 f 函数并进行缓存 cache[arg_str] = cache[arg_str] || f.apply(f, arguments); return cache[arg_str]; };};
主要就是使用了一个 cache 对象来进行数据缓存,通过某种方式(如参数)生成一个独一无二的 key,对应的值就是缓存的值。
只要再次传入相同的参数,就从 cache 中进行取值,而不再进行计算