Hallo Ashura,
window.onload += alert('Foo');
window.onload += alert('Bar');
du rufst also zweimal die alert-Funktion auf und "addierst" das Funktionsergebnis jedesmal zu onload. Hm, wie ist der Plus-Operator für ein Element definiert, das eigentlich eine Referenz (für die Oldschool-Programmierer: einen Zeiger) auf eine Funktion erwartet?
window.onload += callme;
Hier "addierst" du tatsächlich eine Referenz/einen Zeiger auf eine Funktion zu onload...
function callme () {
alert('Baz');
}
und das ist die zugehörige Definition der Funktion.
window.onload += function () {
alert('Qux');
}
dito, nur dass du hier eine namenlose Funktion direkt hinzufügst.
Die Werte „Foo“ und „Bar“ werden wie erwartet ausgegeben. Die anderen jedoch nicht.
Programmierst du auch in C? Wenn nein, schade. Dann müsste dir nämlich der Unterschied zwischen einer Funktion, einem Zeiger bzw. einer Referenz auf eine Funktion und dem Funktionsergebnis klar sein, und das würde dir das Verständnis der hier beschriebenen Zusammenhänge erleichtern.
NaN
function callme() {
alert('Baz');
}
function () {
alert('Qux');
}
Woran liegt es, dass die beiden Funktionen nicht ausgeführt werden
Weil du nur deren Definitionen mit dem onload-Handler verknüpft hast, nicht deren Rückgabewert.
und der Wert der onload-Eigenschaft mit „NaN“ beginnt?
Ich vermute, das ist eine Auswirkung des impliziten, nicht eindeutig durchschaubaren Typecasts, der durch die ersten beiden Anweisungen erzwungen wurde.
Puh, jetzt hast du was zum Knobeln. ;-)
Schönen Abend noch,
Martin
--
"Drogen machen gleichgültig."
- "Na und? Mir doch egal."