Vielleicht weiß ja jemand anderes noch ne zuverlässige Quelle.
Es ist lediglich eine Frage, was wann wie ausgeführt wird. Ein HTML-Dokument wird "von oben nach unten" geparst und die entsprechenden Ressourcen eingelesen. Bindest du zwei JS-Dateien ein, die zueinander Bezug haben, kannst du während des Renderns nur auf die Funktionen direkt zugreifen, die zu diesem Zeitpunkt auch bereits geladen wurden. Beispiel:
test1.js:
---------
boo = (typeof foo == 'function') ? foo() : 42;
window.onload = function() { alert(boo) };
test2.js:
---------
function foo() {
return 'foo';
}
Bindest du erst test1.js ein und dann test2.js, gibt dir dein alert '42' aus. Lädst du erst test2.js und dann test1.js, erhältst du das erwartete 'foo'. Dies ist wichtig für Initialisierungen, die du direkt (also nicht in eine Funktion verpackt) vornimmst. Wenn du aber die Variable boo nicht wie in meinem Beispiel während des Renderns initialisierst, sondern in einer eigenen Funktion, dann ist die Reihenfolge, in der test1.js und test2.js geladen werden, in der Tat wurscht, da Funktionen zwar geparst, aber nicht wie meine Variablenzuweisung noch während des Ladens ausgeführt werden:
test1.js:
---------
window.onload = function() {
boo = (typeof foo == 'function') ? foo() : 42;
alert(boo);
}
Denn hier wird die Funktion onload aufgerufen, also erst dann, wenn das Dokument vollständig geladen wurde. Selbst wenn die alert-Funktion innerhalb des Body aufgerufen werden würde, gibt es im Normalfall keine Probleme, da vor dem Body alle Elemente im Head geladen werden. Einzig für "riesige" JS-Dateien fehlen mir Erfahrungswerte, ob es in diesen Fällen dahingehend zu Problemen kommen könnte, dass der HTML-Code schon gerendert ist, die JS-Datei(en) aber noch nicht vollständig geladen wurden.
Siechfred
Ein Selbständiger ist jemand, der bereit ist, 16 Stunden am Tag zu arbeiten, nur um nicht 8 Stunden für einen Anderen arbeiten zu müssen.