[1] Wanting programs to not depend on this evaluation mechanism is the reason for the management is not responsible remark in footnote 1 of chapter 1. The designers of JavaScript chose to resolve this issue by moving all internal function declarations to the beginning of the function body, and thus the discussion might seem moot. However, this mechanism is only applied to function declarations and not to const declarations.
[2] We can view function declaration statements as a combination of constant declaration statements and function definition expressions, as explained in section 1.3.2, and thus the same technique applies to function declaration statements.
[3] The designers of JavaScript support Alyssa on the following grounds: Eva is in principle correct—the definitions should be regarded as simultaneous. But it seems difficult to implement a general, efficient mechanism that does what Eva requires. In the absence of such a mechanism, it is better to generate an error in the difficult cases of simultaneous definitions (Alyssa's notion) than to produce an incorrect answer (as Ben would have it).
[4] This example illustrates a programming trick for formulating recursive functions without using const, let or function. The most general trick of this sort is the $Y$ operator, which can be used to give a pure $\lambda$-calculus implementation of recursion. (See Stoy 1977 for details on the lambda calculus, and Gabriel 1988 for an exposition of the $Y$ operator in Scheme.)
4.1.6 Internal Declarations