Javascript纯函数缓存

原文链接:Javascript纯函数缓存

前言

最近看了gitbook上的一本书,名叫《JS函数式编程指南》,看到了一个之前从未想到的小方法,做个笔记,记录一下。

实现

var memoize = function(fn){
    var toStr = Object.prototype.toString;
    var isCallable = function (fn) {
       return typeof fn === 'function' || toStr.call(fn) === '[object Function]';
    }
    if (!isCallable(fn)) {
        throw new TypeError('memoize: when provided, the first argument must be a function');
    }
    var cache = {};
    return function(){
        if (arguments.length < 1) {
            throw new TypeError('memoize: arguments cannot be null or undefined');
        }
        var args = Array.prototype.slice.call(arguments);
        var str = args.join('-');
        cache[str] = cache[str] || fn.apply(fn, arguments);
        return cache[str];
    };
};

调用的方式很简单,代码如下:

var sum = memoize(function (a, b) {
    console.log('开始相加');
    return a + b;
});

可以执行一下,看下效果,下图就是在chrome下执行的结果:

代码运行截图

结尾

有很多别人用烂的实现方式,对于我还属于一个新奇的技术,要多学多看,多实践。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容