JavaScript 中的柯里化
各位开发者们大家好!在本系列的这一部分中,我们将讨论 JavaScript 中使用函数的技术,称为Currying。
什么是柯里化?
柯里化是一种将接受多个参数的函数转换为每个接受单个参数的函数序列的技术。
它不断返回一个新函数,直到所有参数都用完。参数保持“存活”(通过闭包),并在柯里化链中的最后一个函数返回并执行时,所有参数都会被用到。
柯里化是函数的一种转换,它将函数从可调用转换为f(a, b, c)
可调用f(a)(b)(c)
。
柯里化的好处实际上并不在于定义,而在于调用该函数所使用的代码。
柯里化并不调用函数,它只是对其进行了转换。
我们可以使用两种方法实现函数柯里化:
如果您不知道什么是bind()方法和闭包,我强烈建议您阅读本系列中有关该主题的上一篇文章,以便清楚地理解。
让我们尝试通过一个例子来了解如何使用这两种方法来实现柯里化。
使用 bind() 方法进行柯里化
function multiply(a, b){
console.log(a * b);
}
let multiplyByTwo = multiply.bind(this, 2);
console.log(multiplyByTwo);
multiplyByTwo(5);
multiplyByTwo(6);
bind()方法为我们提供了该方法的副本multiply
,但并不直接调用它。
因此,在上面的代码片段中,我们永久地将参数的值分配a
为 2,然后重用该multiplyByTwo
方法来分配参数的值b
。
看另一个例子会更清楚。
function multiply(a, b){
console.log(a * b);
}
let multiplyByTwo = multiply.bind(this, 2);
console.log("multiplyByTwo method")
multiplyByTwo(5);
multiplyByTwo(6);
let multiplyByFive = multiply.bind(this, 5);
console.log("multiplyByFive method")
multiplyByFive(5);
multiplyByFive(6);
因此,我们可以通过这种方式使用currying来重用我们的函数。
使用闭包进行柯里化
闭包使得 JavaScript 中的柯里化成为可能。闭包允许你从内部函数访问外部函数的作用域。
它能够保留已执行函数的状态,使我们能够创建工厂函数——可以为其参数添加特定值的函数。
在下面的例子中,我们使用闭包的概念来实现函数柯里化。
function multiply(a){
return function(b){
console.log(a * b);
}
}
let multiplyByTwo = multiply(2);
console.log("multiplyByTwo method")
multiplyByTwo(5);
multiplyByTwo(6);
在上面的代码片段中,multiply(2)
将返回一个已预定义的函数a=2
,然后我们将b
使用分配一个值multiplyByTwo(5)
。
现在看另一个例子:
function multiply(a){
return function(b){
console.log(a * b);
}
}
multiply(2)(10);
在上面的例子中,a
等于 2,b
等于 10。
柯里化的优点
- 提高代码的可重用性。
- 避免频繁调用具有相同参数的函数。
- 使您的代码更易于重构。
这就是 JavaScript 中关于函数柯里化的全部内容。柯里化背后的理念是:获取一个函数,并派生出一个返回特定函数的函数。
包起来!!
谢谢阅读!希望你喜欢学习柯里化的概念。
文章来源:https://dev.to/anuradha9712/currying-in-javascript-3l1j