The this
value in the global execution context, refers to the global object, e.g.:
this === window; // true
For Function Code, it really depends on how do you invoke the function, for example, the this
value is implicitly set when:
Calling a function with no base object reference:
myFunc();
The this
value will also refer to the global object.
Calling a function bound as a property of an object:
obj.method();
The this
value will refer to obj
.
Using the new
operator:
new MyFunc();
The this
value will refer to a newly created object that inherits from MyFunc.prototype
.
Also, you can set explicitly that value when you invoke a function, using either the call
or apply
methods, for example:
function test(arg) {
alert(this + arg);
}
test.call("Hello", " world!"); // will alert "Hello World!"
The difference between call
and apply
is that with apply
, you can pass correctly any number of arguments, using an Array or an arguments
object, e.g.:
function sum() {
var result = 0;
for (var i = 0; i < arguments.length; i++) {
result += arguments[i];
}
return result;
}
var args = [1,2,3,4];
sum.apply(null, args); // 10
// equivalent to call
sum(1,2,3,4); // 10
If the first argument value of call
or apply
is null
or undefined
, the this
value will refer to the global object.
(note that this will change in the future, with ECMAScript 5, where call
and apply
pass the thisArg
value without modification)