molily: window.onload function()

Beitrag lesen

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