If you process the document
\documentclass{article}
\usepackage{endnotes}
\begin{document}
x\endnote{Recall that $\sqrt{2}$ is irrational}
\end{document}
you'll get a file with extension .ent containing
\@doanenote {1}
macro:->Recall
that
$\sqrt
{2}$
is
irrational
\@endanenote
This is a consequence of the definition
\long\def\@endnotetext#1{%
\if@enotesopen \else \@openenotes \fi
\immediate\write\@enotes{\@doanenote{\@theenmark}}%
\begingroup
\def\next{#1}%
\newlinechar='40
\immediate\write\@enotes{\meaning\next}%
\endgroup
\immediate\write\@enotes{\@endanenote}}
and of
\let\@doanenote=0
\let\@endanenote=0
which make the two control sequences into unexpandable tokens.
The \meaning primitive takes as argument a single token and expands to a string representation of the token: all characters will have category code 12, except for space tokens that are normalized to character code 32 (space) with category code 10. If the token is a macro (that is, it has been defined with \def, \edef, \gdef or \xdef), the representation will be of the form
macro:〈parameter text〉->〈replacement text〉
Thus, in the endnotes case above, \meaning\next will expand to
macro:->Recall that $\sqrt {2}$ is irrational
because the parameter text is empty. By rule, each control word in the string representation will be followed by a space.
The macro \@endnotetext does three \write operations. In the first, \@doanote {1} is written out, because \@doanote is not expandable so it is written out as is (with a trailing space), whereas \@theenmark will be expanded. Also { and } are unexpandable, so we get the first line in the example.
Then the expansion of \meaning\next is written, under the setting \newlinechar='40 which means that spaces (character code decimal 32, octal '40) will be transformed into newline characters. I guess this is done for avoiding overlong lines, in case of long endnotes.
Finally \@endanenote is written (on a new line).
When the .ent file is read in by the \theendnotes command, \@doanenote is given a new meaning; basically it reads until > is found, emits \begingroup, sets the mark to the tokens in braces and starts typesetting the note text; \@endanenote is redefined to issue \par\endgroup.
What does \meaning return in other cases? Here are a few examples; I use plain TeX, but it would be the same in all flavors of TeX.
\let\foo=0 % like in endnote.sty
\def\next{Recall that $\sqrt{2}$ is irrational}
\def\macro#1{Something with #1}
\tt % typewriter type
\meaning\relax
\meaning a
\meaning 0
\meaning\alpha
\meaning\foo
\meaning\next
\meaning\macro
\meaning ~
\meaning\&
\meaning\pageno % plain tex
\bye

A control sequence \let to a character will display the same as if the character was used. A control sequence defined with \chardef (like \&) gives \char" followed by the hexadecimal number of the character; similarly for \mathchardef (like \alpha).
The macros \next and \macro show the difference when there is a parameter text; finally, primitives represent themselves (like \relax). There are a few other cases, I showed \pageno that's defined with \countdef.
\meaning\meaningis the meaning of\meaning. – Manuel Nov 09 '16 at 10:54