elisp: Variable Scoping

 
 11.9 Scoping Rules for Variable Bindings
 ========================================
 
 When you create a local binding for a variable, that binding takes
 effect only within a limited portion of the program (SeeLocal
 Variables).  This section describes exactly what this means.
 
    Each local binding has a certain “scope” and “extent”.  “Scope”
 refers to _where_ in the textual source code the binding can be
 accessed.  “Extent” refers to _when_, as the program is executing, the
 binding exists.
 
    By default, the local bindings that Emacs creates are “dynamic
 bindings”.  Such a binding has “dynamic scope”, meaning that any part of
 the program can potentially access the variable binding.  It also has
 “dynamic extent”, meaning that the binding lasts only while the binding
 construct (such as the body of a ‘let’ form) is being executed.
 
    Emacs can optionally create “lexical bindings”.  A lexical binding
 has “lexical scope”, meaning that any reference to the variable must be
 located textually within the binding construct(1).  It also has
 “indefinite extent”, meaning that under some circumstances the binding
 can live on even after the binding construct has finished executing, by
 means of special objects called “closures”.
 
    The following subsections describe dynamic binding and lexical
 binding in greater detail, and how to enable lexical binding in Emacs
 Lisp programs.
 

Menu