In JavaScript, functions are first-class objects. That means they can be passed around, assigned to variables, and — most importantly — called with different contexts using call()
, apply()
, and bind()
.
Let’s break it down simply. 👇
Why Do We Need call
, apply
, and bind
?
Sometimes, you want to change the value of this
inside a function — especially when you borrow a method from another object or use it as a callback.
call()
Method
Syntax:
functionName.call(thisArg, arg1, arg2, ...)
Example:
const user1 = {
name: "Mohit",
};
function greet(greeting) {
console.log(`${greeting}, ${this.name}`);
}
greet.call(user1, "Hello"); // Output: Hello, Mohit
call()
immediately invokes the function and sets this
to user1
.
apply()
Method
Syntax:
functionName.apply(thisArg, [arg1, arg2, ...])
Same as call()
, but it takes arguments as an array.
Example:
const user2 = {
name: "Kumar",
};
greet.apply(user2, ["Hi"]); // Output: Hi, Kumar
apply()
is great when you already have arguments in an array.
bind()
Method
Syntax:
const newFunc = functionName.bind(thisArg, arg1, arg2, ...)
❗ Difference: bind()
does not invoke the function immediately — it returns a new function.
Example:
const user3 = {
name: "React Dev",
};
const greetUser3 = greet.bind(user3, "Welcome");
greetUser3(); // Output: Welcome, React Dev
Useful when you want to call the function later, but with a specific this
.
Quick Comparison Table
Method | Changes this ? |
Invokes Function? | Arguments Format |
---|---|---|---|
call | Yes | Yes | Comma-separated |
apply | Yes | Yes | Array |
bind | Yes | No | Comma-separated (then invoked later) |
Real-World Use Case (Method Borrowing)
const person = {
name: "Mohit",
sayHello: function (age) {
console.log(`Hi, I'm ${this.name} and I'm ${age} years old.`);
},
};
const anotherPerson = {
name: "Rahul",
};
person.sayHello.call(anotherPerson, 30); // Hi, I'm Rahul and I'm 30 years old.
Summary
- Use
call()
orapply()
when you want to invoke a function immediately with a different context. - Use
bind()
when you want to create a new function with a bound context for later use.
Practice Tip: Try rewriting small functions using all three to see how they behave differently.
📺 Want a visual explanation? Watch the upcoming YouTube Video on call
, apply
, and bind
on Mohit Decodes
Got stuck? Want to showcase your version? Drop a link or comment below.
📲 Follow me on Instagram or WhatsApp for daily frontend tips.
👍 If this helped, drop a ❤️ or follow me for more quick JS tips!
Top comments (0)