Если функции в JS являются первоклассными, что позволяет им вызываться до того, как они будут определены?

Разве первоклассные функции не означают, что они ведут себя как переменные? Очевидно, что они не ведут себя точно так же, как переменные, поскольку это:

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

... не работает, тогда как это:

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

... делает.

Тем не менее, это:

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

не работает, что более последовательно.

Что дает?

Ответы на вопрос(4)

Ваш ответ на вопрос