#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​​的函数需要三个参数,而我们将其引入仅需要一个参数的专用版本中,因为其他两个参数已由我们选择。

发表评论

相关文章