NAME

JE::Scope - JavaScript scope chain (what makes closures work)

DESCRIPTION

JavaScript code runs within an execution context which has a scope chain associated with it. This class implements this scope chain. When a variable is accessed the objects in the scope chain are searched till the variable is found.

A JE::Scope object can also be used as global (JE) object. Any methods it does not understand will be delegated to the object at the bottom of the stack (the far end of the chain), so that $scope->null means the same thing as $scope->[0]->null.

Objects of this class consist of a reference to an array, the elements of which are the objects in the chain (the first element being the global object). (Think of it as a stack.)

METHODS

var($name, $value)
var($name)

This method searches through the scope chain, starting at the end of the array, until it finds the variable named by the first argument. If the second argument is present, it sets the variable. It then returns an lvalue (a JE::LValue object) that references the variable. Note that, even though it has the same name as the var JS keyword, it does not create a new variable.

new_var($name, $value)
new_var($name)

This method creates (and optionally sets the value of) a new variable on the nearest end of the scope chain (the top of the scope stack) and returns an lvalue.

To do: Correct this method such that it creates the variable in the first (topmost) object on the scope chain that is a call object, or uses $scope->[0] if none is found. (with and catch are not supposed to affect which object var adds properties to.)

CONSTRUCTOR

None. Just bless an array reference. You should not need to do this because it is done for you by the JE and JE::Object::Function classes.

SEE ALSO

JE
JE::LValue
JE::Object::Function

2 POD Errors

The following errors were encountered while parsing the POD:

Around line 118:

You forgot a '=back' before '=head1'

Around line 126:

'=item' outside of any '=over'

=over without closing =back