Orden de funciones en JavaScript

Mi pregunta se basa en el ejemplo de un libro "JavaScript orientado a objetos"(página 81 - Alcance léxico)

Entonces, entiendo de este ejemplo ...

function f1(){var a = 1; f2();}
function f2(){return a;}
f1();

... ese:

a no está definido

Pero, ¿cómo sabe f1 acerca de f2, que se define después de f1?

Este comportamiento plantea una pregunta:

¿Cómo funciona el intérprete de JavaScript?

Supongo que:

escanea el código y simplemente almacena las funciones, no asignadas a ninguna var, en un entorno globalInvoca una función de manera ad-hoc: cuando no existe tal función en un entorno global, se queja.

Respuestas a la pregunta(2)

Su respuesta a la pregunta