Info Node: (emacs-lisp-intro.info)Prevent confusion
(emacs-lisp-intro.info)Prevent confusion
`let' Prevents Confusion
------------------------
The `let' special form prevents confusion. `let' creates a name for
a "local variable" that overshadows any use of the same name outside
the `let' expression. This is like understanding that whenever your
host refers to `the house', he means his house, not yours. (Symbols
used in argument lists work the same way. Note:The `defun' Special
Form.)
Local variables created by a `let' expression retain their value
_only_ within the `let' expression itself (and within expressions
called within the `let' expression); the local variables have no effect
outside the `let' expression.
Another way to think about `let' is that it is like a `setq' that is
temporary and local. The values set by `let' are automatically undone
when the `let' is finished. The setting only effects expressions that
are inside the bounds of the `let' expression. In computer science
jargon, we would say "the binding of a symbol is visible only in
functions called in the `let' form; in Emacs Lisp, scoping is dynamic,
not lexical."
`let' can create more than one variable at once. Also, `let' gives
each variable it creates an initial value, either a value specified by
you, or `nil'. (In the jargon, this is called `binding the variable to
the value'.) After `let' has created and bound the variables, it
executes the code in the body of the `let', and returns the value of
the last expression in the body, as the value of the whole `let'
expression. (`Execute' is a jargon term that means to evaluate a list;
it comes from the use of the word meaning `to give practical effect to'
(`Oxford English Dictionary'). Since you evaluate an expression to
perform an action, `execute' has evolved as a synonym to `evaluate'.)