A definition is a special kind of Lisp expression that announces your intention to use a symbol in a particular way. It typically specifies a value or meaning for the symbol for one kind of use, plus documentation for its meaning when used in this way. Thus, when you define a symbol as a variable, you can supply an initial value for the variable, plus documentation for the variable.
defconst are special forms that define a
symbol as a global variable—a variable that can be accessed at
any point in a Lisp program. See Variables, for details about
variables. To define a customizable variable, use the
defcustom macro, which also calls
defvar as a subroutine
In principle, you can assign a variable value to any symbol with
setq, whether not it has first been defined as a variable.
However, you ought to write a variable definition for each global
variable that you want to use; otherwise, your Lisp program may not
act correctly if it is evaluated with lexical scoping enabled
(see Variable Scoping).
defun defines a symbol as a function, creating a lambda
expression and storing it in the function cell of the symbol. This
lambda expression thus becomes the function definition of the symbol.
(The term “function definition”, meaning the contents of the function
cell, is derived from the idea that
defun gives the symbol its
definition as a function.)
defalias are two
other ways of defining a function. See Functions.
defmacro defines a symbol as a macro. It creates a macro
object and stores it in the function cell of the symbol. Note that a
given symbol can be a macro or a function, but not both at once, because
both macro and function definitions are kept in the function cell, and
that cell can hold only one Lisp object at any given time.
As previously noted, Emacs Lisp allows the same symbol to be defined
both as a variable (e.g., with
defvar) and as a function or
macro (e.g., with
defun). Such definitions do not conflict.
These definition also act as guides for programming tools. For example, the C-h f and C-h v commands create help buffers containing links to the relevant variable, function, or macro definitions. See Name Help.