函数柯里化(curry)

本文通过示例介绍了JavaScript中函数柯里化的概念和应用场景。通过add函数的改造,展示了如何实现多次调用以累加参数的功能,并进一步探讨了柯里化在正则表达式匹配中的应用,帮助读者理解柯里化如何提高代码复用性和灵活性。
摘要由CSDN通过智能技术生成

我们依旧从需求入手,只有知道我们要干嘛,才能一步步引导我们堆砌出万丈高楼。
先看下面的代码:

  		function add(x,y){
            return x+y
        }
        console.log(add(3,1))//4

如果我们想这样执行add(3)(1)也能输出4,我们该怎么做.我们从这个函数调用可以知道,函数调用了两次,并且调用第一次后返回的是函数才能再调用,第一次调用传入了参数,第二次调用也传入了参数,并把两次传入的参数加起来了。因此我们有:

		 function add(x){
            return function(y){
                return x+y
            }
        }
        console.log(add(3)(1))//4

延伸到我们另一个需求,我们假设let testNumber=regNumber(/\d+/),然后testNumber(‘123abd’),testNumber(‘abc’)来判断传入的参数是不是满足正则,明显真的能实现这样的函数的话,好处是,我们只要写一次正则判断,后面就不用写了,很方便。依据这个需求我们可以这样写:

		function regNumber(reg,str){
           return function (str){
                return reg.test(str)
           }
        }
        let testNumber=regNumber(/\d+/g)
        console.log(testNumber('123abc'))//true
        console.log(testNumber('abc'))//false

回到前面的add函数,如果我们想调用多少次就多少个相加呢,比如add(1)(2)(3)(4)…要达到1+2+3+…加到想要的效果我们应该怎么做呢,这明显是调用了一个函数之后又返回一个函数,因此我们可以定义一个函数返回自己,最后用toString隐式转换的特性,当最后执行时隐式转换,并计算最终的值返回,代码如下:

function add() {
            let args = [...arguments]
            let _adder = function () {
                args.push(...arguments)
                return _adder
            }
            _adder.toString = function () {//利用隐式转换最后执行
                return args.reduce(function (a, b) {
                    return a + b;
                });
            }
            return _adder
        }
        console.log(add(1)(2)(3))//6

到这里我们好像都没有说过什么是柯里化,从上面我们可以看出,柯里化有调用的时候可以别的函数不一样,它是一个个的调用的,形容f(x)(y)(z)…这种。所以今后看到这样调用函数的相比是运用里柯里化,而函数内部可可想到一直return 回函数,最后一个return就是想要的结果。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值