This is just a special binding which automatically resolves to the ThisBinding of the current execution context. This means that Ecmascript makes it look as if at the start of every Program, function or catch statement a variable is created with the name "this". Note that it doesn't actually register a variable. So nothing is recorded into the Lexical Environment.
Due to the combined mechanics of Ecmascript, there are about five different scopings for this, depending on how the current scope is called/invoked.
As a property:
var y = {x:function(){}}, z = {};
y.x(); // this = y
y["x"](); // this = y
z.x = x;
z.x(); // this = z
When calling through .call or .apply, you give it the context. In ES5 it depends on strict code what happens in some cases:
function x(){};
var y = {};
x.call(y, 1, 2, 3); // this = y
x.apply(y, [1,2,3]); // this = y
y = null;
x.call(y); // strict mode: this = undefined, else: this = global
x.apply(y); // strict mode: this = undefined, else: this = global
y.x = x;
y.x.call(5); // this = 5
And then there is bind:
function x(){}
x.bind("me");
x(); // this = "me"
var y = {x:x};
y.x(); // this = "me"
x.call("you"); // todo: lookup :p, i think still "me" since bind overrides anything
For other code, in strict mode this will be undefined, otherwise it will refer to global.