js函数柯里化

柯里化的概念

所谓的柯里化就是具有较多参数的函数转换成具有较少参数的函数的过程

例如 :获取随意四个数的和

  
	
        //这是我们平常的写法
        function getSum(a, b, c, d) {
            return a + b + c + d
        }
        console.log(getSum(1, 2, 3, 4));   //10


        //经过柯里化函数后就可这样写
        function getSum(a, b, c, d) {
            return a + b + c + d
        }
        //柯里化功能函数
        function curry(fn) {
            //...
        }
        //此时会返回一个新的函数,newGS就是经过柯里化处理过的新的函数
        let newGS = curry(getSum) 
        //如果你的函数参数传递完成,会直接执行,没有传递完成,会继续返回一个函数期待下次调用函数是把参数传递完成,知道传完为止
        console.log(newGS(1, 2)(3, 4));   
        console.log(newGS(1, 2)(3)(4));  
        console.log(newGS(1)(2)(3)(4));  
        

获取随意四个数的和(经过柯里化处理)


        function getSum(a, b, c, d) {
            return a + b + c + d
        }
        //柯里化函数
        function curry(fn, args) {  //args不是每次传递进来的都是空数组  所以要传个形参
            let length = fn.length  //获取函数fn传递参数的总长度
            args = args || []   //给个空数组存放传递进来的数值
            return function (...test) {
                let _args = [...args, ...test]  //把所有的数值放入到这个数组中
                if (_args.length < length) {   //当传递数值的长度小于总长度是,会继续返回此函数  
                    return curry.call(this, fn, _args)     //此时this指向curry  call要改变this指向 并指向fn
                } else {
                    return fn.apply(this, _args)   //长度相等就返回和 
                }
            }
        }
        let newGS = curry(getSum)
        console.log(newGS(1, 2, 3, 4));  //10
        console.log(newGS(1, 2)(3, 4));  //10
        console.log(newGS(1, 2)(3)(4));  //10
        console.log(newGS(1)(2)(3)(4));  //10
        

日常会用到的柯里化函数(ajax)

  //ajax也会用到柯里化
        function ajax(method,url,data){
            var xhr = new XMLHttpRequest
            xhr.open(method,url,true)
            xhr.send(data)
        }
        //原生写法
        //ajax('GET','www.baidu.com','{}')

        //柯里化函数后写法
        let ajax_get = curry(ajax)
        ajax_get('GET')('www.baidu.com')(null)

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值