Think of an abstract object that is not exposed to us. It's defined by the implementation, and available to the implementation only – "implementation" meaning the JavaScript engine which will be running your code.
For example, consider the following function:
function f(a,b) {
var foo = 5;
return a + b + foo;
}
The variables and arguments defined within that function's scope could be represented as an object that would look like this:
{
a,
b,
foo
}
The values of the object's properties can change during the execution of the function. If you call the function with f(1,2), for example, the object will look like this as soon as the function execution starts:
{
a: 1,
b: 2,
foo: undefined
}
After foo is assigned 5, it will look like this:
{
a: 1,
b: 2,
foo: 5
}
Consider this object as if it was declared inside the function. So, you can access the values of a, b and foo inside the function, but not outside it.