Von allen guten und bösen Geistern verlassen

Nach einem mehr oder minder Durchhänger-Tag (aber was will ich erwarten wenn ich morgens so wie heute geweckt werde?) habe ich noch ein kleines Betthupferl. Selbst beim einkaufen im Supermarkt meiner Qual ging mir eine Frage nicht aus dem Kopf. Mir schien es bei meinem Skript, als wenn die Initialisierung einer Variable am Anfang des Skriptes nicht möglich sei:


<script type="text/javascript">
//<![CDATA[
var hex=0; //start color value
var loading = document.getElementById("transmissionstatus");

Auf die Variable hex konnte ich im weiteren Verlauf problemlos in den Funktionen zugreifen. Bei loading gab es immer eine Fehlermeldung. Die Lösung ist, wie so oft, relativ einfach. Das Skript befindet sich vor dem HTML-Teil und damit auch vor dem Objekt mit der ID. Daher existiert das Objekt zum Zeitpunkt der Variablendeklaration noch nicht. Wieder falsch gedacht. Warum es bei hex geht, kann ich nicht erklären. In JavaScript ist es so, dass das Schlüsselwort var grundsätzlich eine Variable zu einer lokalen Variable macht. Ohne var ist es eine globale Variable.

Also einfach nur das Schlüsselwort weglassen, und schon geht es. Mein Bauchgefühl (ich weiß, darauf sollte ich mich zumindest beim programmieren nicht verlassen) sagt mir aber, dass die folgen, auch funktionierende Variante noch etwas eleganter wäre:


window.onload  = function () {
hex=0; //start color value
loading = document.getElementById("transmissionstatus");
}

Ich für meinen Teil kann jetzt auf jeden Fall beruhigt schlafen. Und morgen ist ja Samstag.

3 Kommentare

  1. Öhm. Stimmt nicht so ganz. Wenn eine Variable innerhalb einer Funktion definiert wird, dann ist sie auch nur innerhalb der Funktion verfügbar. Man spricht dabei von lokalen Variablen.
    Wird die Variable ausserhalb einer Funktion definiert, dann steht sie auch innerhalb von allen anderen Funktionen zur Verfügung. In diesen Fall spricht man von einer globalen Variable.
    Will man innerhalb einer Funktion eine globale Variable definieren, z.B. um sie in anderen Funktionen weiter zu verarbeiten, dann lässt man das Schlüsselwort var weg und macht die Variable damit global.

    Deine Vermutung das dass Object zum Zeitpunkt der Variablendefinition noch gar keinen Wert hat ist richtig. Das JavaScript wird abgearbeitet bevor überhaupt etwas auf dem Bildschirm zu sehen ist. Also auch bevor der Browser das Objekt mit der ID erzeugt hat.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

DSGVO Cookie Consent mit Real Cookie Banner