admin 管理员组

文章数量: 1087652

柯里化函数的理解

柯里化函数

    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)   //柯里化函数sumlet s = f(10)   //复用第一个参数10let 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方法返回}}}}

本文标签: 柯里化函数的理解