函数柯里化

在数学和计算机科学之中,柯里化是一种将使用多个参数的一个函数转换成一些列使用一个参数的函数的技术。

前端为什么要用柯里化:
前端使用柯里化的用途主要是简化代码结构,提高系统的维护性,一个方法,只有一个参数,强制了功能的单一性,很自然就做到了功能内聚,降低耦合。

柯里化的优点:
降低代码的重复率,提高代码的适应性。

调用形式:

function add(a, b, c) {};
var newAdd = Curry(add);
newAdd(1)(2)(3);

封装柯里化函数:
柯里化函数 function Curry(fn) {} 需要传入一个 固定参数的函数 作为参数
 

        // 柯里化前奏
        // 需要固定参数的函数
        // fiexd params
        function add(a, b, c, d) {
            return a + b + c + d;
        }

        function FiexdParamsCurry(fn) {
            // 把类数组arguments的第2~n位,剪切到数组_arg之中
            var _arg = Array.prototype.slice.call(arguments, 1);
            return function () {
                // 把这个域的arguments和上个域的_arg拼接到newArg里面
                var newArg = _arg.concat([].slice.call(arguments, 0));
                return fn.apply(this, newArg);
            }
        }
        var newAdd = FiexdParamsCurry(add, 1, 1);
        console.log(newAdd(1, 1));

        // 柯里化函数,必须传入一个固定参数的函数(fn)
        // 柯里化函数的特性:期望实参能凑齐 ————> look forward to Params
        function Curry(fn, length) {
            // 记录fn所需要的实参个数
            var length = length || fn.length;
            return function () {
                if (arguments.length < length) {
                    var combined = [fn].concat([].slice.call(arguments, 0));
                    return Curry(FiexdParamsCurry.apply(this, combined), length - arguments.length);
                }else {
                    return fn.apply(this, arguments);
                }
            }
        }
        var curryAdd = Curry(add);



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值