Se as funções em JS são de primeira classe, o que permite que sejam chamadas antes de serem definidas?

As funções de primeira classe não significam que elas se comportam como variáveis? Claramente eles não se comportam exatamente como variáveis, desde que:

console.log(foo);
var foo = 'bar';

... não funciona, enquanto isso:

console.log(foo());
function foo() {
 return('bar');
}

...faz.

Dito isto, isto:

console.log(foo());
var foo = function() { return 'bar'; };

não funciona, o que é mais consistente.

O que da?

questionAnswers(4)

yourAnswerToTheQuestion