#yyds干货盘点#JS函数式编程:柯里化
Posted 尼羲
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#yyds干货盘点#JS函数式编程:柯里化相关的知识,希望对你有一定的参考价值。
面向对象编程和函数式编程是两种非常不同的编程范式,它们有自己的规则和优缺点。
但是,javascript 并没有一直遵循一个规则,而是正好处于这两个规则的中间,它提供了普通OOP语言的一些方面,比如类、对象、继承等等。但与此同时,它还为你提供了函数编程的一些概念,比如高阶函数以及组合它们的能力。
函数柯里化是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。我们来看个例子:
function adder(a, b)
return a + b
// 变成
const add10 = x => adder(a, 10)
现在,如果你要做的就是将10
添加到一系列值中,则可以调用add10
而不是每次都使用相同的第二个参数调用adder
。 这个事例看起来比较蠢,但它是体现了 柯里化
的理想。
你可以将柯里化视为函数式编程的继承,然后按照这种思路再回到logger
的示例,可以得到以下内容:
function log(msg, msgPrefix, output)
output(msgPrefix + msg)
function consoleOutput(msg)
console.log(msg)
function fileOutput(msg)
let filename = "mylogs.log"
writeFileSync(msg, filename)
const logger = msg => log(msg, ">>", consoleOutput);
const fileLogger = msg => log(msg, "::", fileOutput);
log
的函数需要三个参数,而我们将其引入仅需要一个参数的专用版本中,因为其他两个参数已由我们选择。
注意,这里将log
函数视为抽象类,只是因为在我的示例中,不想直接使用它,但是这样做是没有限制的,因为这只是一个普通的函数。 如果我们使用的是类,则将无法直接实例化它。
以上是关于#yyds干货盘点#JS函数式编程:柯里化的主要内容,如果未能解决你的问题,请参考以下文章