Next: Buffer-Local Variables Prev: Setting Variables Up: Variables
Scoping Rules for Variable Bindings
A given symbol `foo' may 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
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
textually within the function or block that binds the variable.
Common Lisp note: variables declared "special" in Common Lisp are
dynamically scoped like variables in Emacs Lisp.
- Scope means where in the program a value is visible.
Comparison with other languages.
- 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