.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "JE::Scope 3pm" .TH JE::Scope 3pm "2023-08-25" "perl v5.36.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" JE::Scope \- JavaScript scope chain (what makes closures work) .SH "DESCRIPTION" .IX Header "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. .PP A JE::Scope object can also be used as global (\s-1JE\s0) 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 \f(CW\*(C`$scope\->null\*(C'\fR means the same thing as \f(CW\*(C`$scope\->[0]\->null\*(C'\fR. .PP 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.) .SH "METHODS" .IX Header "METHODS" .ie n .IP "find_var($name, $value)" 4 .el .IP "find_var($name, \f(CW$value\fR)" 4 .IX Item "find_var($name, $value)" .PD 0 .IP "find_var($name)" 4 .IX Item "find_var($name)" .PD 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. .ie n .IP "new_var($name, $value)" 4 .el .IP "new_var($name, \f(CW$value\fR)" 4 .IX Item "new_var($name, $value)" .PD 0 .IP "new_var($name)" 4 .IX Item "new_var($name)" .PD This method creates (and optionally sets the value of) a new variable in the variable object (the same thing that JavaScript's \f(CW\*(C`var\*(C'\fR keyword does) and returns an lvalue. .Sp The variable object is the first object in the scope chain (searching from the top of the stack) that is a call object, or \f(CW\*(C`$scope\->[0]\*(C'\fR if no call object is found. .SH "CONSTRUCTOR" .IX Header "CONSTRUCTOR" None. Just bless an array reference. You should not need to do this because it is done for you by the \f(CW\*(C`JE\*(C'\fR and \f(CW\*(C`JE::Object::Function\*(C'\fR classes. .SH "SEE ALSO" .IX Header "SEE ALSO" .IP "\s-1JE\s0" 4 .IX Item "JE" .PD 0 .IP "JE::LValue" 4 .IX Item "JE::LValue" .IP "JE::Object::Function" 4 .IX Item "JE::Object::Function"