DEV Community

Nandan Kumar
Nandan Kumar

Posted on • Originally published at blog.nandan.dev on

Yet another blog on Call, Apply & Bind..!!

Call bind apply
Bla Bla Bla..

Okay, Hear me out..!!

Hundreds of blogs and tutorials explain call, bind, and apply. Heck, even ChatGPT and Copilot can simplify them for you!

So why another post? Well, this ones not for _you_its my self-note as I revisit JavaScript fundamentals.

Even after 8 years in front-end development, I sometimes mix up these methods. Turns out, the confusion often stems from how theyre grouped in interview questions. Let me break it down for youthis time, in a way that sticks.

Can we skip to the good part.

Why is it always call, bind, and apply in interviews? Functionally, call and apply are closerthey invoke the function immediatelywhile bind returns a new function. Thats why Ive grouped them this way in the title.

Let's look at their usage to understand it better.

What is common among Call, Bind & Apply?

call , bind , and apply are methods available on functions that allow you to explicitly set the value of this and pass arguments to the function.

What is the difference between Call, Bind & Apply?

While Call and Apply Immediately invoke the function, the Bind method does not immediately invoke the function. instead, it returns a new function with this set to a specified value, and this returned function can be invoked/executed later.

What is the difference between Call and Apply then?

While both Call and Apply immediately invoke the function with the custom this, its how they take the additional argument that differentiates them.

While Call takes the individual arguments, Apply takes an array of arguments.

Examples

Lets look at the below argument to understand the use of call, apply and bind.

function Greetings(greeting,punctuation){
    return `${greeting} ${this.name} ${punctuation}`
}

var person = {
    name : "Nandan"
}

// Call: Immediately invokes the function with individual arguments
console.log(Greetings.call(person,"Hello","!")); // Output : Hello Nandan !

// Apply: Immediately invokes the function, but takes arguments as an array
console.log(Greetings.apply(person,["Hello","!"])); // Output : Hello Nandan !

// Bind: Returns a new function with `this` bound to the specified value
let greet = Greetings.bind(person,"Hello","!");
console.log(greet()); // Output : Hello Nandan !

//Note:
console.log(Greetings.bind(person,"Hello","!")); // Output : It will return a function
Enter fullscreen mode Exit fullscreen mode

Some Additional Examples

Using call : Borrowing methods from another object:

let person1 = { name: "Nandan" };
let person2 = { name: "Kumar" };

function introduce() {
    console.log(`Hi, my name is ${this.name}`);
}

introduce.call(person1); // Hi, my name is Nandan
introduce.call(person2); // Hi, my name is Kumar
Enter fullscreen mode Exit fullscreen mode

Using apply : Finding the max value in an array:

let numbers = [1, 2, 3, 4, 5];
console.log(Math.max.apply(null, numbers)); // 5
Enter fullscreen mode Exit fullscreen mode

Using bind : Event handling with custom this:

let button = document.getElementById("myButton");
let user = {
    name: "Nandan",
    greet() {
        console.log(`Hello, ${this.name}`);
    }
};

button.addEventListener("click", user.greet.bind(user));
Enter fullscreen mode Exit fullscreen mode

Additionally, I hope this table will help you understand it better.

Feature

Execution

Arguments

Use Case

call

Executes the function immediately

Passed individually

When you know arguments at call time

apply

Executes the function immediately

Passed as an array

When arguments are in an array

bind

Returns a new function (does not execute)

Optionally pre-filled for the new function

When you need a reusable or pre-configured function

Thats all, folks! I hope you found this short note on Call, Apply & Bind helpful. If you enjoyed this, check out more articles on my website, https://nandan.dev/

Feel free to comment, email me at connect@nandan.dev, or connect with me on Twitter, Instagram, or GitHub. Dont forget to subscribe to my newsletter for regular updates on JavaScript topics!

Twitter | Instagram | Github | Website

Top comments (0)