relex: Javascript Anfängerfrage - Variablen

Ich habe ein Problem mit globalen Variablen und werde aus der Erklärung auf selfhtml nicht ganz schlau.

Da steht:
-----------
...eine global Variable. Sie ist im gesamten Dokument gültig und steht jederzeit zur Verfügung. Wenn Sie innerhalb von Funktionen Variablen ohne das Schlüsselwort var deklarieren, dann sind diese Variablen global.
-----------

Ich habe also im head-Bereich meier HTML-Datei eine Funktion worin ich eine Variable definiere.

stk1=parent.spframe.document.spform.stk_bild_spiel.value

Laut der selfhtml Definition müsste das eine globale Variable sein, welche im gesamten Dokument gültig ist und jederzeit zur Verfügung steht.

Inerhalb dieser Funktion kann ich die Variable auch auslesen.
alert(stk1)
... funktioniert also.

Wenn ich nun diese Variable im body-Bereich verwenden möchte heisst es aber, dass diese Variable undefiniert ist.

<script type="text/javascript" language="JavaScript">
<!--
alert(stk1);
//-->
</script>
...funktioniert nicht.

Es gibt dafür sicher eine einfache Erklärung. Ich habe aber keine Ahnung welche. Kann mir bitte jemand helfen.

  1. Globale Variablen müssen ausßerhalb einer Funktion definiert werden.

    1. Globale Variablen müssen ausßerhalb einer Funktion definiert werden.

      Danke für die schnelle Antwort.

      Aber was hat dann dieser Satz zu bedeuten??

      ----
      Wenn Sie innerhalb von Funktionen Variablen ohne das Schlüsselwort var deklarieren, dann sind diese Variablen global.
      ----

      Das versteh ich nach wie vor nicht.

      1. Hi,

        Aber was hat dann dieser Satz zu bedeuten??

        dort wird schlechter Stil beschrieben. Deklariere Variablen *immer* mit 'var'. Wenn Du sie global benötigst, so deklariere sie im globalen Scope. Innerhalb einer Funktion kannst Du sie dann sowohl lesend als auch schreibend verwenden.

        Noch besser ist es übrigens, auf globale Variablen so gut es geht zu verzichten.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Ich habe nicht gesagt, dass du sie ohne var deklarieren sollst, sondern lediglich außerhalb von function { ... }.
          Ich würde Variablen aber immer so lokal, wie nur möglich halten und sie nur im äußersten Notfall als global deklarieren

  2. Hallo,

    ich denke mal, das Problem hat damit zu tun, dass die beiden Anweisungen in unerwünschter Reihenfolge ausgeführt werden.

    Ich habe also im head-Bereich meier HTML-Datei eine Funktion worin ich eine Variable definiere.

    stk1=parent.spframe.document.spform.stk_bild_spiel.value

    Klar, das ist eine globale Variable.

    Die wird aber erst gesetzt, wenn du diese Funktion aufrufst. Das ist i.d.R. erst der Fall, nachdem das Dokument vollständig geladen wurde.

    Laut der selfhtml Definition müsste das eine globale Variable sein, welche im gesamten Dokument gültig ist und jederzeit zur Verfügung steht.

    Richtig.

    Wenn ich nun diese Variable im body-Bereich verwenden möchte heisst es aber, dass diese Variable undefiniert ist.

    <script type="text/javascript" language="JavaScript">
    <!--
    alert(stk1);
    //-->
    </script>
    ...funktioniert nicht.

    (Die language-Angabe und die Auskommentarierung kann man sich heutzutage sparen.)

    Wenn du einfach ein script-Element im body unterbringst und darin direkt ein alert machst, wird dieser beim Laden des Dokuments ausgeführt. Höchstwahrscheinlich wurde stk1 zu dem Zeitpunkt noch nicht gesetzt. Wann rufst du also die Funktion auf, die stk1 setzt? Nach dem abgeschlossenen laden vielleicht (onload)?

    Mathias