GNU Info

Info Node: (elisp)Variable Scoping

(elisp)Variable Scoping


Next: Buffer-Local Variables Prev: Setting Variables Up: Variables
Enter node , (file) or (file)node

Scoping Rules for Variable Bindings
===================================

   A given symbol `foo' can have several local variable bindings,
established at different places in the Lisp program, as well as a global
binding.  The most recently established binding takes precedence over
the others.

   Local bindings in Emacs Lisp have "indefinite scope" and "dynamic
extent".  "Scope" refers to _where_ textually in the source code the
binding can be accessed.  "Indefinite scope" means that any part of the
program can potentially access the variable binding.  "Extent" refers
to _when_, as the program is executing, the binding exists.  "Dynamic
extent" means that the binding lasts as long as the activation of the
construct that established it.

   The combination of dynamic extent and indefinite scope is called
"dynamic scoping".  By contrast, most programming languages use
"lexical scoping", in which references to a local variable must be
located textually within the function or block that binds the variable.

     Common Lisp note: Variables declared "special" in Common Lisp are
     dynamically scoped, like all variables in Emacs Lisp.

Scope
Scope means where in the program a value is visible.
Comparison with other languages.
Extent
Extent means how long in time a value exists.
Impl of Scope
Two ways to implement dynamic scoping.
Using Scoping
How to use dynamic scoping carefully and avoid problems.

automatically generated by info2www version 1.2.2.9