柯里化函数的理解

柯里化函数

    1. 柯里化函数
       有多个形参的函数转换成多个只有一个形参的函数
f(a,b,c) ->  fn(a)
               fn1(b)
                fn2(c)
f(a,b,c) ->  fn(a)(b)(c)
   function sum(a,b){
            return a + b
        }
        
        // let s = sum(10,20)
        // console.log(s)
        
        /*
          sum进行柯里化转换 -> f(10)(20)  <=> sum(10,20)
                            let f = curryingSum(sum)
        */
        
       function curryingSum(sum){
            return function(a){   //接收第一个参数
                return function(b){  //接收第二个参数
                    return sum(a,b)   //两个参数融入sum中计算进行返回
                }
            }
       }

       let f = curryingSum(sum)

       let s = f(10)(20)
       console.log('s ',s)

2.可以实现参数的复用

   function sum(a,b){
            return a + b
        }
        
       function curryingSum(sum){
            return function(a){   //接收第一个参数
                return function(b){  //接收第二个参数
                    return sum(a,b)   //两个参数融入sum中计算进行返回
                }
            }
       }

       let f = curryingSum(sum)   //柯里化函数sum
       
        let s = f(10)   //复用第一个参数10
    
       let k = s(20)
       let g = s(50)
       console.log('k ',k,'g',g)   //30  60

​ 1.参数复用的好处:

	1.我们在封装一个函数时,如果我们确定前几部的操作该到哪里,那我们可以进行柯里化确定的操作  避免一些重复的操作

3.通用的封装方法 我们可以一次传入多个值 还可以多次操作 提高了程序复用性

function currying(func) { 
				return function curried(...args) {     //展开参数  可以一次传多个参数  暂时第一次传的参数
					if (args.length >= func.length) {  //判断传入参数是否  全部获取
                        return func.apply(this,args)     
                        // return func(...args)            //这两个写法是一样的效果                     

					} else {
						return function (...arg2) {		//展开参数  可以一次传多个参数  暂时第二次传的参数
							let arg = [...args, ...arg2]   //合并参数
							return curried.apply(this, arg)		全部传入curried方法返回
						}
					}
				}
			}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值