Jeśli funkcje w JS są pierwszej klasy, co pozwala na ich wywołanie przed ich zdefiniowaniem?

Czy funkcje pierwszej klasy nie oznaczają, że zachowują się jak zmienne? Oczywiście nie zachowują się dokładnie tak, jak zmienne, ponieważ:

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

... nie działa, podczas gdy to:

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

...robi.

To powiedziawszy:

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

nie działa, co jest bardziej spójne.

Co daje?

questionAnswers(4)

yourAnswerToTheQuestion