Skip to main content

Command Palette

Search for a command to run...

Currying in JavaScript

It is a conversion of functions from callable as f(a,b,c) into callable as f(a)(b)(c).

Published
•2 min read•View as Markdown
Currying in JavaScript
V

Hello World 👋 I'm Vedanth Bora, a JavaScript developer and I specialize in Frontend Development. I love using my technical skills to build cool & interesting things. In my spare time, I work on open-source projects related to JavaScript, React, TypeScript, etc.

What is Currying?

Currying is a function that takes one argument at a time and returns a new function expecting the next argument. It is a conversion of functions from callable as f(a,b,c) into callable as f(a)(b)(c).

Currying doesn’t call a function. It just transforms a function. They are constructed by chaining closures by immediately returning their inner functions simultaneously.

How does currying work?

Currying is a function that takes multiple arguments as input. It transforms the function into a number of functions where every function will accept one argument.

Let’s understand this with examples

Convert f(a, b) into f(a)(b)

/* f(a,b) implementation */

function f(a,b) {
    return a + b
}
/* f(a)(b) implementation */

function f(a) {
    return (b) {
          return a + b
        }
}

console.log(f(1)(2)) // 2
console.log(f(1)); /* () => {} */        // will retrun a function
/*Simple function*/ 
const add = (a, b, c)=>{
    return a + b + c
}

console.log(add(1, 2 ,3)); // 6

/* Curried Function */

const addCurry = (a) => { // takes one argument
    return (b) => {                 //takes second argument
        return (c) => {             //takes third argument
            return a + b + c
        }
    }
}

console.log(addCurry(1)(2)(3)); //6

A currying function that takes infinite arguments.

const sum = function(a) {
    return function(b) {
        if (b) {
            return sum(a + b);
        } else {
            return a;
        }
    }
}

// sum(1)(2)(3)....()

How can we manipulate DOM using currying?

<div>
  <h1 id="header">Hello World</h1>
</div>

want browser to show "Hello Currying" instead of "Hello World".

Let's try it using currying.

Steps:

1️⃣ Take the id of the element as one argument and the content inside the element as another argument.

const updateElemText = (id) => (content) => document.querySelector(`#${id}`).textContent= content;

2️⃣ Now call the function with element id and and the content

const updateHeaderText = updateElemText('header');

updateHeaderText('Hello Currying!');

What is showing up on the browser? 👀

Hope this blog helped you understand currying better.