JS高级函数-函数柯里化

首先简单介绍一下什么是“函数柯里化”,在《javascript高级程序设计》这本书中有如下介绍:

与函数绑定紧密相关的主题是函数柯里化,它用于创建已经设置好的一个或者多个参数的函数。函数柯里化的基本方法和函数绑定是一样的:使用一个闭包返回一个函数。两者的区别在于,当函数被调用时,返回的函数还需要设置一些传入的参数。

我们来通俗易懂的理解一下,既然是“函数柯里化”,我们首先得需要一个函数,然后再来想办法来“柯里化”它,所以我们先创建一个简单的函数add

function add(num1,num2){
    return num1 + num2;
}
复制代码

柯里化的目标是:创建已经设置好的一个或者多个参数的函数,所以接下来创建一个函数,这个函数需要使用闭包返回一个已经设置好的一个或者多个参数的函数,取名curry

function curry(fn){
    return function(){
        
    }
}
复制代码

此时的curry函数将用于“柯里化”我们刚刚创建的函数add,所以add函数将作为参数传入curry中

接下来,我们来继续完成curry函数,既然要固定一个或者多个参数,那么该参数需随add函数一起传入curry中,由于固定的可以是一个或者多个,所以我们运用数组的slice方法把它从参数列表中截取出来

function curry(fn){
    var args = Array.slice.call(arguments,1);//第0位为fn,从第1位开始获取后面所有参数
    return function(){
        
    }
}
复制代码

固定的参数截取出来后,再获取传入参数,合并参数,传入给add,返回add函数执行的结果

function curry(fn){
    var args = Array.prototype.slice.call(arguments,1);//第0位为fn,从第1位开始获取后面所有参数
    return function(){
        var innerArgs = Array.prototype.slice.call(arguments);//获取后传入的参数
        var finalArgs = args.concat(innerArgs);//合并
        return fn.apply(null,finalArgs);
    }
}
复制代码

假设此时固定add方法第一个参数为数字5

var curridAdd = curry(add,5)

此时的curridAdd即为柯里化后的函数

curridAdd(2) //固定参数为5,传入参数为2,结果为7

也可以固定2个参数

var curridAdd = curry(add,5,1)

curridAdd(2) //固定参数为5和1,无论传入参数为多少,结果为6

至此一个简单的柯里化函数curry实现了

转载于:https://juejin.im/post/5abb90ca6fb9a028c5233dfe

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值