Call, Apply and Bind in JavaScript

Ramkumar Khubchandani
3 min readOct 16, 2023

--

The call(), apply(), and bind() methods in JavaScript are powerful tools that allow you to call functions with a specified this value and arguments. These methods can be used to write more flexible and reusable code.

What is the this value?

The this value in JavaScript is a special variable that refers to the current object. When a function is called, the this value is set to the object that the function is called on.

What is the difference between call(), apply(), and bind()?

The call() and apply() methods are similar, but they differ in how they pass arguments to the function. The call() method takes the arguments as individual parameters, while the apply() method takes the arguments as an array.

The bind() method is different from call() and apply() in that it does not immediately call the function. Instead, it returns a new function that has the specified this value and arguments bound to it. This new function can then be called later with different arguments.

Examples

Here are some examples of how to use the call(), apply(), and bind() methods:

Call:

function greet(name) {
console.log(`Hello, ${name}!`);
}

// Call the `greet()` function with the `this` value set to `null` and the argument "Alice".
greet.call(null, "Alice");

// Output: Hello, Alice!

Apply:

function greet(name) {
console.log(`Hello, ${name}!`);
}

// Call the `greet()` function with the `this` value set to `null` and the arguments "Alice" and "Bob" passed as an array.
greet.apply(null, ["Alice", "Bob"]);

// Output: Hello, Alice! Bob!

Bind:

function greet(name) {
console.log(`Hello, ${name}!`);
}

// Create a new function that is bound to the `greet()` function with the `this` value set to `null` and the argument "Alice" bound to the first parameter.
const greetAlice = greet.bind(null, "Alice");

// Call the bound function with the argument "Bob".
greetAlice("Bob");

// Output: Hello, Alice! Bob!

When to use call(), apply(), and bind()

The call(), apply(), and bind() methods can be used in a variety of situations. Here are some common use cases:

  • To call a function with a specified this value. This can be useful when you want to call a function on an object that is not the current object. For example, the following code snippet uses the call() method to call the log() method on the console object with the this value set to the window object:
console.log.call(window, "Hello, world!");
  • To call a function with a variable number of arguments. The apply() method is useful for calling a function with a variable number of arguments, because it takes the arguments as an array. For example, the following code snippet uses the apply() method to call the Math.max() function with the arguments 1, 2, and 3:
const max = Math.max.apply(Math, [1, 2, 3]);

console.log(max); // 3
  • To create a new function that is bound to a specified this value and arguments. The bind() method is useful for creating new functions that are bound to a specified this value and arguments. This can be useful for creating callback functions or for creating functions that can be used in different contexts. For example, the following code snippet uses the bind() method to create a new function that is bound to the greet() function with the this value set to null and the argument "Alice" bound to the first parameter:
const greetAlice = greet.bind(null, "Alice");

// The `greetAlice()` function can now be called with different arguments.
greetAlice("Bob"); // Output: Hello, Alice! Bob!

Conclusion

The call(), apply(), and bind() methods in JavaScript are powerful tools that allow you to call functions with a specified this value and arguments. These methods can be used to write more flexible and reusable code.

--

--

Ramkumar Khubchandani
Ramkumar Khubchandani

Written by Ramkumar Khubchandani

Frontend Developer|Technical Content Writer|React|Angular|React-Native|Corporate Trainer|JavaScript|Trainer|Teacher| Mobile: 7709330265|ramkumarkhub@gmail.com

Responses (1)