DEV Community

Cover image for JavaScript Currying
Todd Carlson
Todd Carlson

Posted on

 

JavaScript Currying

This week, as I was learning about functional programming with JavaScript, I came across the concept of currying. As per usual I got to learn a cool new programming term that I had never heard before. This weeks' fun new word was "arity." If you hear someone refer to the "arity" of a function, they are talking about the number of arguments that the function requires. With this in mind, currying a function means to convert a function of X "arity" into X functions of "arity" 1. Let's look at an example to get a better understanding of what this means.

const normalFunction = (a, b) => {
    return a + b;
}
Enter fullscreen mode Exit fullscreen mode

Here we have an example of an un-curried function with an "arity" of 2, since it takes in two arguments a, and b.

const curriedFunction = a => b => a + b;

curriedFunction(2)(4)

// returns 6
Enter fullscreen mode Exit fullscreen mode

If, for some reason, you are unable to supply all of the arguments for a function at one time, this could come in handy. You could save each function call into a variable, which would hold the value of the returned function which could then take the next argument when it becomes available.

let funcB = curriedFunction(1);

console.log(funcB(2));

// Returns 3
Enter fullscreen mode Exit fullscreen mode

And there you have it, a short and sweet introduction to JavaScript currying. I encourage you all to explore this topic in more depth, since I have heard it is a fairly common question to encounter during technical interviews.

Latest comments (0)

An Animated Guide to Node.js Event Loop

Node.js doesn’t stop from running other operations because of Libuv, a C++ library responsible for the event loop and asynchronously handling tasks such as network requests, DNS resolution, file system operations, data encryption, etc.

What happens under the hood when Node.js works on tasks such as database queries? We will explore it by following this piece of code step by step.