什么是函数柯里化?

原文链接:https://note.noxussj.top/?source=helloworld


什么是函数柯里化?

函数柯里化(Haskell Brooks Curry),当一个函数有多个参数的时候先传递一部分参数并且调用它(这部分参数后续不会进行改变),然后返回一个新的函数接收剩余的参数并返回结果。

总结

  • 柯里化可以让我们给一个函数传递较少的参数得到一个已经记住了某些固定参数的新函数
  • 这是一种对函数参数的 "缓存"
  • 让函数变的更灵活,让函数的粒度更小

基础案例

案例 1

1function checkAge(arg1) { 2 return function (arg2) { 3 return arg2 >= arg1 4 } 5} 6 7// 检查是否大于 18 岁 8let checkAge18 = checkAge(18) 9 10// 检查是否大于 20 岁 11let checkAge20 = checkAge(20) 12 13console.log(checkAge18(19)) // true 14console.log(checkAge20(19)) // false

案例 2

1// 封装柯里化函数 2function curry(fn) { 3 return function curriedFn(...args) { 4 if (args.length < fn.length) { 5 return function (...args2) { 6 return curriedFn(...args.concat(Array.from(args2))) 7 } 8 } 9 return fn(...args) 10 } 11} 12 13function getSum(a, b, c) { 14 return a + b + c 15} 16 17const curried = curry(getSum) 18 19const fn1 = curried(1) // 返回新函数,接收剩余的参数 20 21const fn2 = fn1(2) // 返回新函数,接收剩余的参数 22 23const fn3 = fn2(3) // 返回结果 6
点赞
收藏

评论区

加载中...

相关推荐

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

Python基础5——装饰器

13、装饰器其本质:在不需要做任何代码变动的前提下,增加额外的功能。装饰器返回的是一个函数对象。相当于把函数作为参数传递进去,然后对函数进行装饰其本质就是一个闭包作用:1.给原来的函数增加额外的功能2.把原来的函数作为参数传递进去13.1基本用法标准版的装饰器pythondefwrapper(func):func为原来的函数名defin

java传值与引用的关系

       首先,我们必须要搞清楚的一件事是,不管java的参数类型是什么,一律传递的是参数的副本。也就是说每次传递参数的时候都会讲参数拷贝一份传递。1.基本数据类型:       对于基本的数据类型来说,java传递的是指的副本;也就是将数据拷贝一份以后传递。因此当函数返回的时候,不管在调用的函数中做了什么操作,基本数据类型的值都不会改变。

什么是函数组合?

原文链接:什么是函数组合?函数组合(Compose),如果一个函数要经过多个函数处理才能得到最终值,这个时候可以把中间过程的函数合并成一个函数。函数组合默认是从右到左执行,每个函数只能接收一个参数,否则需使用柯里化进行转换。作用函数组合可以让我们把细粒度的

什么是高阶函数?

原文链接:什么是高阶函数?有两种情况都可以被定义为高阶函数,第一种是把函数作为参数传递给另外一个函数,第二种是把函数作为另一个函数的返回结果。就像我们平时调用函数,一般都是传递值类型或者对象和数组等参数,或者是函数返回结果是值类型或者是对象和数组,高阶函数

初识 JS 中的柯里化

作为函数式编程语言,JS带来了很多语言上的有趣特性,比如柯里化。1.简介柯里化(Currying),又称部分求值(PartialEvaluation),是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。核心思想是把多参数传入的函数拆成单参数(或部分)函