Markus Speicherl: globale variablen

Woran kann es liegen das manche vars gloabl und manche nicht sind?

Wenn ich schreibe:
  var sStepping = 0;
  function functest(val){

alert(sStepping);
  }

gibt er mir ein "undefinied aus". Dabei habe ich schon über 70 Zeilen code in dem das wunderbar funktionierte. Ich bin total verwirrt.

  1. Lieber Markus,

    gibt er mir ein "undefinied aus".

    dann mußt Du ihm diesen String vorher zugewiesen haben, sonst könnte er das nicht ausgeben. ;-)

    Wenn ich schreibe:
      var sStepping = 0;
      function functest(val){

    alert(sStepping);
      }

    Hast Du jeweils den Scope berücksichtigt? Je nach Verschachtelung kann es sein, dass Deine Funktion die Variable eben nicht kennt. Ein größerer Ausschnitt bzw. Link wäre jetzt aussagekräftiger.

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
  2. Hallo Markus,

    Woran kann es liegen das manche vars gloabl und manche nicht sind?

    Wenn ich schreibe:
      var sStepping = 0;
      function functest(val){

    alert(sStepping);
      }

    Kann es sein, dass du den IE7 in Verbindung mit Windows Vista benutzt hast?

    Da erlebt man diesbezüglich Überraschungen, wie ich gerade selbst leidvoll  bei der Programmierung eines Adventskalenders habe erfahren müssen:

    In allen anderen Browsern und unter allen anderen Betriebssystemen ging nur das Türchen desjenigen Tages auf, der serverseitig gesetzt wurde; im IE7 unter Windows Vista aber alle! Gelöst habe ich das Problem, indem ich die Benutzung gleichnamiger lokaler Variablen vermied.

    Das hätte ich ohnehin gemacht, wenn ich nicht suf die Schnelle den Code eines Kollegen vom letzten Jahr hätte wiederverwerten sollen, als es noch weder IE7 noch Windows Vista gab.

    Noch besser hätte man natürlich von vornherein nur auf serverseitige Technik gesetzt, aber da der Kunde erst Anfang letzter Woche bekannt machte, dass auch dieses Jahr wieder am ersten Dezember das Öffnen des ersten Türchens ansteht, war zur kompletten Neuprogrammierung leider keine Zeit mehr.
    ;-)

    Gruß Gernot

    1. Hallo Gernot!

      Kann es sein, dass du den IE7 in Verbindung mit Windows Vista benutzt hast?

      Kannst Du hier näher erläutern, was im Bezug auf globale Variablen anders sein soll?

      Viele Grüße aus Frankfurt/Main,
      Patrick

      --

      _ - jenseits vom delirium - _
      [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
      Nichts ist unmöglich? Doch!
      Heute schon gegökt?
      1. Hallo Patrick,

        Kannst Du hier näher erläutern, was im Bezug auf globale Variablen anders sein soll?

        Ich kann es hier an meinem privaten Rechner unter Windows XP gar nicht nachstellen, das ist ja das Problem!

        Aber es war so etwas in der Art:

          
        function functest(){  
           myVar = 0;  
           return (myVar);  
        }  
          
        function melden () {  
           var myVar = 1;  
           return functest();  
        }  
          
        alert(melden());  
        
        

        Und da war myVar im IE7 unter Windows Vista "undefined" statt 0, wie man es erwarten würde. Ich schaue aber am Montag nochmal genauer nach und poste es dann hier; denn es war wirklich merkwürdig!

        Gruß Gernot

        1. Hallo nochmal Patrick,

          wie versprochen: das ist das Skript, wie es _nur_ im IE7 unter Vista Probleme machte, statt der anzuklickenden Adventskalendertür kannst du ja einfach den Übergabeparamter beim Aufruf ändern und/oder den gesetzten Tag für "heute".

          Ich kann den Fehler auch jetzt nicht unter XP nachstellen. Ünglücklicherweise war, wie mir jetzt erst auffällt, im Skript von vor einem Jahr ja auch noch eine globale Variable mit der Bezeichnung "status" benannt. Möglicherweise war "status" unter Vista ja auch immer "0" da "window.status" hineinspielte. Globale Varaiblen sind ja, wenn ich das richtig sehe, immer Eigenschaften des Window-Objekts.

          Ich bin durch diese Sache jedenfalls darin bestätigt, dass es im Zweifel immer besser ist, Skripte selbst neu zu schreiben, als Skripte anderer ungeprüft zu übernehmen.

          Gruß Gernot

            
            
          var jahr = 2007;  
          var monat = 11;  
          var tag = 3;  
            
          function pruefe_datum(tuerNr) {  
            
          var tuer = new Date(2007, 11, tuerNr, 0, 0, 0);  
          var heute = new Date(jahr, monat, tag, 0, 0, 0);  
            
            
             if ( heute > tuer ) {  
                 status = 1;  
             } else {  
                 if ( heute < tuer ) {  
                     status = -1;  
                 } else {  
                     status = 0;  
                 }  
             }  
             return status;  
          }  
            
          function tuerOeffnen(tag) {  
            
          var status = pruefe_datum(tag);  
             if ( status == 0 ) {  
                 alert("Die Nummer der angeklickten Tuer entspricht dem heutigen Datum");  
           } else {  
                   if (status == -1) {  
                     alert("zu frueh!");  
                 } else {  
                     alert("zu spaet!");  
                 }  
             }  
             return false;  
          }  
          
          
          1. Hallo Gernot!

            Mist, ich bin sicher, dass ich hier gestern geantwortet hatte. War aber sicher mal wieder ein Opfer der Vorschau...

            Ich werde meinen gestrigen Beitrag nun nicht mehr ganz wieder hinbekommen, nur soviel:

            Ich habe kein IE 7 auf Vista, nur einen Hauptrechner mit IE 6 auf XP und den aus allen löchern pfeifenden, fünfjährigen Laptop mit IE 7 auch auf XP. Aus diesem Grund liebäugle ich mit einem neuen, der würde sicher mit vorinstalliertem Vista kommen, deswegen hat mich das interessiert ;)

            Mit Deinem Script bekomme ich auf keinem IE eine Fehlermeldung, nur schreiben Sie beide den Wert von »status« in die Statuszeile...

            Jedenfalls danke für die Rückmeldung!

            Viele Grüße aus Frankfurt/Main,
            Patrick

            --

            _ - jenseits vom delirium - _
            [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
            Nichts ist unmöglich? Doch!
            Heute schon gegökt?
    2. Lieber Gernot,

      Kann es sein, dass du den IE7 in Verbindung mit Windows Vista benutzt hast?

      Da erlebt man diesbezüglich Überraschungen

      das hört sich ja fast so an, als hätte der IE7 unter Vista soetwas wie register_globals unter PHP... Iegitt, was M$ da wieder pfuscht! Was den IE angeht können die wohl niemals etwas richtig machen, oder?

      Liebe Grüße aus Ellwangen,

      Felix Riesterer.

      --
      ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
  3. Wenn ich schreibe:
      var sStepping = 0;
      function functest(val){

    alert(sStepping);
      }

    gibt er mir ein "undefinied aus".

    Wenn ich den Code 1:1 ausführe (ink.. den von dir nicht gezeigten Aufruf) geben mir alle Browser 0 aus - dein Browser muss kaputt sein.

    Struppi.