JavaScript 中的柯里化

2025-06-04

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);
Enter fullscreen mode Exit fullscreen mode

图像.png

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);
Enter fullscreen mode Exit fullscreen mode

图像.png

因此,我们可以通过这种方式使用currying来重用我们的函数。

使用闭包进行柯里化

闭包使得 JavaScript 中的柯里化成为可能。闭包允许你从内部函数访问外部函数的作用域。

它能够保留已执行函数的状态,使我们能够创建工厂函数——可以为其参数添加特定值的函数。

在下面的例子中,我们使用闭包的概念来实现函数柯里化。

function multiply(a){
    return function(b){
        console.log(a * b);
    }
}

let multiplyByTwo = multiply(2);
console.log("multiplyByTwo method")
multiplyByTwo(5);
multiplyByTwo(6);
Enter fullscreen mode Exit fullscreen mode

图像.png

在上面的代码片段中,multiply(2)将返回一个已预定义的函数a=2,然后我们将b使用分配一个值multiplyByTwo(5)

现在看另一个例子:

function multiply(a){
    return function(b){
        console.log(a * b);
    }
}

multiply(2)(10);
Enter fullscreen mode Exit fullscreen mode

图像.png

在上面的例子中,a等于 2,b等于 10。

柯里化的优点

  • 提高代码的可重用性。
  • 避免频繁调用具有相同参数的函数。
  • 使您的代码更易于重构。

这就是 JavaScript 中关于函数柯里化的全部内容。柯里化背后的理念是:获取一个函数,并派生出一个返回特定函数的函数。

包起来!!

谢谢阅读!希望你喜欢学习柯里化的概念。

请我喝杯咖啡

文章来源:https://dev.to/anuradha9712/currying-in-javascript-3l1j
PREV
使用 React 创建图像放大镜
NEXT
提高生产力的顶级 Mac 应用 💪