Ordem das funções em JavaScript

Minha pergunta é baseada no exemplo de um livro "JavaScript orientado a objeto"(página 81 - Escopo lexical)

Então, eu entendo deste exemplo ...

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

... que:

a não está definido

Mas como f1 sabe sobre f2, que é definido após f1?

Esse comportamento levanta uma questão:

Como o interpretador JavaScript funciona?

Presumo que:

varre o código e simplesmente armazena as funções, não atribuídas a nenhuma var, em um ambiente globalInvoca uma função de maneira ad-hoc: quando não existe tal função em um ambiente global, então reclama.

questionAnswers(2)

yourAnswerToTheQuestion