Next: Buffer-Local Variables, Previous: Setting Variables, Up: Variables [Contents][Index]
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
the others.
Local bindings in SXEmacs 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 variables in SXEmacs 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. |