JavaScript 函数式编程技巧 - 柯里化

作为函数式编程语言,JS带来了很多语言上的有趣特性,比如柯里化和反柯里化。

这里可以对照另外一篇介绍 JS 反柯里化 的文章一起看~

1. 简介

柯里化(Currying),又称部分求值(Partial Evaluation),是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。

核心思想是把多参数传入的函数拆成单参数(或部分)函数,内部再返回调用下一个单参数(或部分)函数,依次处理剩余的参数。

按照Stoyan Stefanov --《JavaScript Pattern》作者 的说法,所谓“柯里化”就是使函数理解并处理部分应用

柯里化有3个常见作用:

  1. 参数复用
  2. 提前返回
  3. 延迟计算/运行

talk is cheap,看看怎么实现吧~

2. 实现

2.1 通用实现

一个通用实现:

function currying(fn, ...rest1) {
  return function(...rest2) {
    return fn.apply(null, rest1.concat(rest2))
  }
}

注意这里concat接受非数组元素参数将被当做调用者的一个元素传入

用它将一个sayHello函数柯里化试试:
function sayHello(name, age, fruit) {
console.log(console.log(我叫 ${name},我 ${age} 岁了, 我喜欢吃 ${fruit}))
}

const curryingShowMsg1 = currying(sayHello, ‘小明’)
curryingShowMsg1(22, ‘苹果’) // 我叫 小明,我 22 岁了, 我喜欢吃 苹果

const curryingShowMsg2 = currying(sayHello, ‘小衰’, 20)
curryingShowMsg2(‘西瓜’) // 我叫 小衰,我 20 岁了, 我喜欢吃 西瓜

发布了105 篇原创文章 · 获赞 3 · 访问量 3602

猜你喜欢

转载自blog.csdn.net/qq_36360463/article/details/105030349