跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

柯里化函数,这到底是什么?为什么还要用它?

柯里化(Currying)是什么?

柯里化,听起来是不是很高级?其实它就是一种函数的高阶技术,不仅JavaScript里用得到,其他编程语言里也有它的身影。简单来说,柯里化就是将一个函数从可调用的 f(a, b, c) 转换为可调用的 f(a)(b)(c) 的过程。它不会直接调用函数,只是对函数进行转换。

举个例子,你就明白了

我们来创建一个辅助函数curry(f),它会对两个参数的函数f进行柯里化。比如,对于两个参数的函数f(a, b),执行curry(f)后,它就会变成以f(a)(b)形式运行的函数。 function curry(f) { // curry(f) 执行柯里化转换 return function(a) { return function(b) { return f(a, b); } } } 用法也很简单,比如我们有一个求和函数sum(a, b),我们可以这样柯里化它: function sum(a, b) { return a + b; } let curriedSum = curry(sum); alert( curriedSum(1)(2) ); // 输出 3

柯里化的高级用法

柯里化不仅可以简化函数调用,还可以实现更高级的功能。比如,lodash库的_.curry函数,它允许函数被正常调用或者以偏函数的方式调用。 function sum(a, b) { return a + b; } let curriedSum = _.curry(sum); alert( curriedSum(1, 2) ); // 输出 3 alert( curriedSum(1)(2) ); // 输出 3

柯里化的目的和好处

柯里化的主要目的是为了提高代码的可读性和可维护性。比如,我们有一个日志函数log(date, importance, message),通过柯里化,我们可以轻松地创建偏函数,比如用于生成今天的日志的偏函数。 function log(date, importance, message) { alert(`[${date.getHours()}:${date.getMinutes()}] [${importance}] ${message}`); } log = _.curry(log); let logNow = log(new Date()); logNow(

相关文章