Search code examples
javascriptfunctional-programmingterminologydefinitioncurrying

What is 'Currying'?


I've seen references to curried functions in several articles and blogs but I can't find a good explanation (or at least one that makes sense!)


Solution

  • Currying is when you break down a function that takes multiple arguments into a series of functions that each take only one argument. Here's an example in JavaScript:

    function add (a, b) {
        return a + b;
    }
    
    add(3, 4); // returns 7
    

    This is a function that takes two arguments, a and b, and returns their sum. We will now curry this function:

    function add (a) {
        return function (b) {
            return a + b;
        }
    }
    

    This is a function that takes one argument, a, and returns a function that takes another argument, b, and that function returns their sum.

    add(3)(4); // returns 7
    
    var add3 = add(3); // returns a function
    
    add3(4); // returns 7
    
    • The first statement returns 7, like the add(3, 4) statement.
    • The second statement defines a new function called add3 that will add 3 to its argument. This is what some may call a closure.
    • The third statement uses the add3 operation to add 3 to 4, again producing 7 as a result.