Was ist denn eigentlich der genaue Unterschied zwischen "window.onload=" und "body onload="?
Funktional keiner.
Beides wird doch ausgeführt wenn die Seite geladen ist oder?
Ja. Das eine ermöglicht die Notierung im JavaScript, das andere im HTML. Da man heutzutage dazu tendiert, Event-Handler auch im JavaScript zu setzen und aus dem HTML möglichst herauszuhalten, bietet sich die JavaScript-Variante an, die keine Änderungen in den HTML-Dokumenten nötig macht.
Und, was bewirkt "window.onload = function()" ?
Es erzeugt eine Funktion und speichert sie in der Objekt-Eigenschaft window.onload. Das ist das Schema des traditionellen Event-Handlings.
Wird hier explizit gesagt das nach dem Laden der Seite eine Funktion ausgeführt wird?
Ja.
window.onload = function() {
MeineFunction();
}
>
> Könnte man nicht auch einfach
> window.onload = MeineFunction();
> sagen?
Man könnte
window.onload = MeineFunction;
sagen, ja, das hätte denselben Effekt wie der obige Code, der noch eine zweite Wrapper-Funktion erzeugt.
Warum man nicht
window.onload = MeineFunction();
schreiben kann bzw. das nicht den gewünschten Effekt hätte, habe ich hier beschrieben:
<http://molily.de/js/einbindung.html#fehler-handler-aufrufen>
> warum müssen / können hier die Klammern weggelassen werden
Weil da sonst stehen würde:
objekt.eigenschaft = funktion();
Die »()« rufen die Funktion sofort (zum Zeitpunkt dieser Zuweisung). Damit würde man den Rückgabewert des Aufrufes dieser Funktion der Eigenschaft zuweisen. Traditionelles Event-Handling funktioniert aber so, dass man das Funktionsobjekt in einer Eigenschaft speichert.
objekt.eigenschaft = funktion;
> bzw. was macht man wenn eine Funktion zwingend Parameter braucht?
Siehe den [obigen Link](http://molily.de/js/einbindung.html#fehler-handler-aufrufen).
In dem Fall könnte man eine weitere Funktion anlegen, es bietet sich dann eine Funktion an, die mit einem Funktionsausdruck notiert wurde.
~~~javascript
window.onload = function () { // Funktionsausdruck
handler1(param1, param2, param3);
handler2(param1, param2, param3);
};
Das kann man abstrahieren und dann nennt es sich »Currying«, aber das ist schon viel komplizierter.
Mathias