Reputation: 281
In this code what does undefined mean? Without specifying undefined it says " my name is undefined and i am a undefined"
(function(){
'use strict';
function theFunction(name, profession) {
console.log("My name is " + name + " and I am a " + profession + " . ");
}
theFunction("John", "fireman");
theFunction.apply(undefined,["ali", "Developer"]);
theFunction.call(undefined, "sara", "doctor");
}());
Upvotes: 1
Views: 126
Reputation: 105489
My answer assumes that by Without specifying undefined
you mean a call like that:
theFunction.apply(["ali", "Developer"]);
When you use call
or apply
, the first parameter is the execution context (variable this
inside theFunction
). The two examples set it to undefined
, so this
inside theFunction
will evaluate to undefined
. For example:
function theFunction(name, profession) {
console.log(this); // logs `undefined`
console.log("My name is " + name + " and I am a " + profession + " . ");
}
theFunction.apply(undefined, ["ali", "Developer"]);
Here is the thread explaining why one would use undefined
as execution context.
Now, to your question. If you omit undefined
in your call is like that:
theFunction.apply(["ali", "Developer"]);
the execution context - this
- is set to ["ali", "Developer"]
, and name
and profession
are evaluated as undefined
since you only pass one parameter to apply
, that is why you're getting "My name is undefined and I am a undefined"
call
and apply
are usually used when you want to change the execution context of the function. You're probably using apply
to turn array of arguments into separate arguments. To do that, you need to set the same execution context as the one that would have been if you called the function without apply:
theFunction("John", "fireman"); // `this` points to `window`
theFunction.apply(this, ["John", "fireman"]); // `this` points to `window`
Upvotes: 6
Reputation: 1
Though theFunction()
is not included as one of the calls tried, theFunction()
reproduces result described at Question
Without specifying undefined it says " my name is undefined and i am a undefined"
that is, to call theFunction()
without passing parameters; which would be expected result where name
and profession
are undefined
within function body when theFunction
is called.
(function() {
'use strict';
function theFunction(name, profession) {
console.log("My name is " + name + " and I am a " + profession + " . ");
}
theFunction(); // logs result described at Question
theFunction("John", "fireman");
theFunction.apply(undefined, ["ali", "Developer"]);
theFunction.call(undefined, "sara", "doctor");
}());
Upvotes: 1