2010-02-26 3 views
51

Ich frage mich, ob es irgendwelche verfügbaren Ressourcen gibt, die beschreiben, wie der Cursor eines Browsers Javascript ausführt.Wann führt der Browser Javascript aus? Wie bewegt sich der Ausführungscursor?

Ich weiß, dass Tags geladen und ausgeführt werden, wenn eine Seite geladen wird, und dass Sie Funktionen an verschiedene Fensterereignisse anhängen können, aber wo die Dinge unscharf werden, wenn ich zum Beispiel eine entfernte Seite über AJAX abrufe und den Inhalt ablege ein div.

Wenn diese Remote-Seite Skriptbibliotheken wie <script src="anotherscript.js" /> laden muss, wann wird "anotherscript.js" geladen und der Inhalt wird ausgeführt?

Was passiert, wenn ich "anotherscript.js" in meine aktuelle Seite einfüge, und dann einige entfernte Inhalte lade, die ein doppeltes Include dieses Skripts enthalten? Überschreibt es das Original? Was ist, wenn das Original "anotherscript.js" eine Variable enthält, deren Wert ich ändere, und dann diese Datei neu lade ... verliere ich den ursprünglichen Wert oder wird die zweite Aufnahme dieses Skripts ignoriert?

Wenn ich etwas prozedurales Javascript über AJAX lade, wann wird es ausgeführt? Sofort danach mache ich mydiv.innerHTML(remoteContent)? Oder ist es davor ausgeführt?

+13

Verwenden Sie keine selbstschließenden '

3

Wenn Sie einen HTML-Block mit Skript-Tags mit "innerHTML" in Ihr DOM stopfen, werden die Skript-Tags überhaupt nicht ausgeführt. Wenn Sie Elemente wie jQuery laden, behandelt der Code in dieser Bibliothek explizit das Auffinden und Ausführen der Skripts.

Es ist nicht genau genau, aber Sie können grundsätzlich an die Verarbeitung eines <script>-Tags denken, als ob der gesamte Inhalt des Tags (d. H. Der Skriptkörper) mit eval() ausgeführt würde. Wenn das Skript globale (Fenster-) Variablen deklariert, werden alte Werte überschrieben.

Skript-Tags werden in der Reihenfolge verarbeitet, in der sie angezeigt werden. Natürlich kann der Code in den Skriptblöcken so eingerichtet werden, dass er bei der ersten Ausführung die Verarbeitung der echten Verarbeitung bis später verzögert. Viel jQuery Setup/Initialisierungs-Code wird das tun.

+0

Mir wurde gesagt, dass innerHTML parsen und ausführen wird JavaScript. Deshalb sollten Sie bei innerHTML vorsichtig sein :) Aber vielleicht gilt das nur für den Inhalt eines Tags, nicht für eine .js-Datei, die in src =? –

+0

Nun versuchen Sie es :-) Ich weiß, dass jQuery explizit verschiedene Sachen macht, wenn es feststellt, dass ein String-Argument zu 'html()' keine Skript-Tags enthält - speziell verwendet es nur 'innerHTML() '. – Pointy

+0

@Adrian: Re * "... mir wurde gesagt, dass innerHTML JavaScript parsen und ausführen wird. Deshalb solltest du bei innerHTML vorsichtig sein ..." * Nun, du * willst * den von Nutzern bereitgestellten Inhalt niemals direkt einem Element über 'innerHTML', wenn das ist, was Sie vorsichtig sind, aber ich bin nicht bewusst, einen Browser, der führt 'script' Tags (Inline-oder Verweis auf eine externe Datei), wenn Sie dies tun. –

Verwandte Themen