The call method calls the function with a given this value and arguments.
call(thisArg, arg1, ... , argN)
thisArg: The this value on executing the function. It is an optional argument. However, if thisArg is skipped, the this value is:
We can pass any number of arguments to the function after the thisArg argument.
The call method returns the value returned by the function.
var number = 10;
function test(num1) {
num1 = num1 ? num1 : 0;
return this.number + num1;
}
console.log("Calling without thisArg");
console.log( test.call() ); // 10
let obj = {number : 20};
console.log("Calling with thisArg");
console.log( test.call(obj)); // 20
console.log("Calling with thisArg and arguments");
console.log( test.call(obj, 100) ); // 120
In the above code, we have created a test function that will return the sum of number property in the this object and the argument passed.
First, we called the test function using the call method without the thisArg argument. The global object is considered as this.
Then, we called the test method by passing obj as thisArg. Inside the test function, obj is considered as thisArg.
Lastly, we passed thisArg and argument to the test function.
"use strict" // strict mode
var number = 10;
function test(num1) {
num1 = num1 ? num1 : 0;
return this.number + num1;
}
console.log("Calling without thisArg");
console.log( test.call() ); // error
In the above code, we have called the test function without thisArg. This will result in an error because in strict mode, if we don’t pass the thisArg to the call function, then the this value inside the function is undefined. When trying to access the this value(undefined), we will get an error.