Mal davon abgesehen, dass ich das Prinzip des Hoisting noch nicht ganz begriffen habe (in meinen Basteleien hat es keine offensichtliche Bedeutung)
Kurz gesagt, Funktionsdeklarationen werden (in einem Ausführungskontext) zuerst ausgeführt, egal wo sie im Quellcode stehen:
alert(typeof foo); // function
function foo () {}
alert(typeof foo); // function
versus
alert(typeof foo); // undefined
var foo = function () {}
alert(typeof foo); // function
bin ich mir nicht sicher, ob jemand explizit über Hoisting nachdenken muss, wenn er ein Script schreibt.
Wenn man intuitiv davon ausgeht, dass Code von oben nach unten abgearbeitet wird, sodass eine Funktion immer deklariert/notiert sein muss, bevor man sie nutzt, bekommt man in der Regel keine Probleme, auch wenn das bei JavaScript durch das Hoisting nicht wirklich der Fall ist.
Es kann aber, genauso wie Hoisting von Variablendeklarationen, eine Fehlerquelle sein, wenn man funktional programmiert. Beispielsweise kann man Funktionsdeklarationen nicht in if-Anweisungen verschachteln oder sonstwie davon ausgehen, dass die Funktion vor dem Code, der sie deklariert, noch nicht zur Verfügung steht. Das ist bei Funktionsausdrücken, die in einer Variablen gespeichert werden, anders.
Mathias