Hallo,
im Buch "JavaScript: The Definitive Guide“ wird folgender Code dargestellt (Example 13-5. onLoad(): invoke a function when the document loads):
Frage 1
Der Ablauf des Codes ist mir nicht ganz klar: Während das Dokument lädt, wird der JavaScript-Code ausgeführt („first phase“ S. 317). Damit wird onLoad.loaded = false gesetzt und anschließend die Funktion onLoad ausgeführt, wobei die (anonyme) Funktion übergeben wird. An dieser Stelle ist onLoad.loaded auf jeden Fall false. Damit wird zunächst ein EventListener registriert/attached. Wenn das Dokument dann geladen ist („load“ - Event), wird die (anonyme) Funktion erstmalig ausgeführt und onLoad.loaded = true gesetzt. Die Funktion setTimeout() wird doch dann aber gar nie ausgeführt!?
Frage 2
Es könnte zudem sein, dass das Dokument bei Ausführung des Codes bereits fertig geladen ist. Dann wird auch hier onLoad.loaded = false gesetzt und durch die Funktion onLoad ein EventListener registriert/attached. Da es jedoch keinen weiteren load Event mehr gibt, wird die (anonyme) Funktion gar nie ausgeführt. Sehe ich das richtig? Falls nein, wie läuft der Code ab?
Frage 3
Wird mit onLoad.loaded = false; eine Variable innerhalb der Funktion onLoad erstellt (dann aber müsste man in der Funktion onLoad nicht onLoad.loaded schreiben, sondern nur loaded) oder wird im globalen Objekt ein neues Objekt onLoad angelegt (mit demselben Namen wie die Funktion onLoad - das ginge aber wohl auch nicht) mit einem Property loaded?
Gruß,
Joller
im Buch "JavaScript: The Definitive Guide“ wird folgender Code dargestellt (Example 13-5. onLoad(): invoke a function when the document loads):
Code:
// Register the function f to run when the document finishes loading.
// If the document has already loaded, run it asynchronously ASAP.
function onLoad(f) {
if (onLoad.loaded) // If document is already loaded
window.setTimeout(f, 0); // Queue f to be run as soon as possible
else if (window.addEventListener) // Standard event registration method
window.addEventListener("load", f, false);
else if (window.attachEvent) // IE8 and earlier use this instead
window.attachEvent("onload", f);
}
// Start by setting a flag that indicates that the document is not loaded yet.
onLoad.loaded = false;
// And register a function to set the flag when the document does load.
onLoad(function() { onLoad.loaded = true; });
Der Ablauf des Codes ist mir nicht ganz klar: Während das Dokument lädt, wird der JavaScript-Code ausgeführt („first phase“ S. 317). Damit wird onLoad.loaded = false gesetzt und anschließend die Funktion onLoad ausgeführt, wobei die (anonyme) Funktion übergeben wird. An dieser Stelle ist onLoad.loaded auf jeden Fall false. Damit wird zunächst ein EventListener registriert/attached. Wenn das Dokument dann geladen ist („load“ - Event), wird die (anonyme) Funktion erstmalig ausgeführt und onLoad.loaded = true gesetzt. Die Funktion setTimeout() wird doch dann aber gar nie ausgeführt!?
Frage 2
Es könnte zudem sein, dass das Dokument bei Ausführung des Codes bereits fertig geladen ist. Dann wird auch hier onLoad.loaded = false gesetzt und durch die Funktion onLoad ein EventListener registriert/attached. Da es jedoch keinen weiteren load Event mehr gibt, wird die (anonyme) Funktion gar nie ausgeführt. Sehe ich das richtig? Falls nein, wie läuft der Code ab?
Frage 3
Wird mit onLoad.loaded = false; eine Variable innerhalb der Funktion onLoad erstellt (dann aber müsste man in der Funktion onLoad nicht onLoad.loaded schreiben, sondern nur loaded) oder wird im globalen Objekt ein neues Objekt onLoad angelegt (mit demselben Namen wie die Funktion onLoad - das ginge aber wohl auch nicht) mit einem Property loaded?
Gruß,
Joller