什么是JavaScript中的柯里化函数
这是一种函数式编程技术,将多个参数的函数转化为多个单参数函数后续调用。
函数的转化大致类似于以下过程,
function simpleFunction(param1, param2, param3, .....) => function
curriedFunction(param1)(param2)(param3)(....
我们只是在一个函数内部包装了另一个函数,这意味着我们要从另一个函数返回一个函数来实现这种转换。父函数接收第一个提供的参数并返回一个接收下一个参数的函数,这样一直重复直到参数的数量结束。希望接收到最后一个参数的函数返回期望的结果。
注意: 美国数学家Haskell Curry开发了这种技术,所以它被称为柯里化。
为什么在JavaScript中柯里化很有用?
- 它帮助我们创建高阶函数
- 通过将函数分解为多个处理单一职责的小函数,它减少了函数出错的机会
- 在构建模块化和可重用的代码时非常有用
- 它帮助我们避免多次传递相同的变量
- 它使代码更易读
示例1: 假设我们有一个长方体的长度、宽度和高度,并且我们想要构建一个能够计算体积的函数。调用该函数会根据提供的参数执行其代码并返回适当的结果,最后 console.log 在控制台上打印返回的值。
JavaScript
function calculateVolume(length, breadth, height) {
return length * breadth * height;
}
console.log(calculateVolume(4, 5, 6));
输出:
120
示例2: 该示例通过闭包解释了柯里化技术。在执行线程中,会调用calculateVolume()函数。内部有一个匿名函数,接收一个参数并返回一些代码。我们将函数暴露给另一个函数,因此会创建一个闭包。闭包始终包含函数定义以及父级的词法环境,两者作为一个整体保持连接。因此,无论我们在何处调用它们,所有内部函数始终具有对父级变量的访问权限。
一旦我们得到返回的函数作为结果,就可以传递下一个参数,这个过程将持续到倒数第二个函数。最后,最内部的return关键字返回期望的结果。
JavaScript
function calculateVolume(length) {
return function (breadth) {
return function (height) {
return length * breadth * height;
}
}
}
console.log(calculateVolume(4)(5)(6));
输出:
120
极客教程