函数柯理化

函数柯理化的表现是:把一个需要传入多个变量的函数变为多个嵌套函数,并且内层函数会调用上层函数的变量。
柯理化函数的核心是闭包

//柯理化工厂函数,可以多次调用,最后统一求值。
function currying(fn) {
    
    
    var args = Array.prototype.slice.call(arguments, 1);
    return function () {
    
    
        if (arguments.length === 0) {
    
    
            return fn.apply(this, args);
        }
        else {
    
    
            Array.prototype.push.apply(args, arguments);
            return arguments.callee;
        }
    }
}
function add() {
    
    
    var vals = Array.prototype.slice.call(arguments);
    return vals.reduce((pre, val) => {
    
    
        return pre + val;
    });
}
var newAdd = currying(add, 1,2)(3)(4);
newAdd (5) //往里面添加值,未真正求值
console.log(newAdd());//15
//当调用 cost()时,如果明确地带上了一些参数,表示此时并不进行真正的求值计算,而是把这些参数保存起来,此时让 cost 函数返回另外一个函数。
//只有当我们以不带参数的形式执行 cost()时,才利用前面保存的所有参数,真正开始进行求值计算

总之,柯理化就是利用模块化思想处理多参函数,通过组合函数减少每个函数的入参数量,从而提高代码的可阅读性及可维护性。

猜你喜欢

转载自blog.csdn.net/weixin_51109349/article/details/125168110