sigurd: Hat JS Referenzen wie PHP? a = &b?

Hallo zusammen,

ich habe eine ganz kurze und vermutlich einfache Frage. Hat Javascript Referenzen wie PHP sie hat?

$a = &$b;

Ich bräuchte sowas im Argument einer Funktion:

function foo(&bar) { ... }

Geht das irgendwie?

  1. ich habe eine ganz kurze und vermutlich einfache Frage. Hat Javascript Referenzen wie PHP sie hat?

    nein. In JS ist alles, ausser einfachen Datentypen, eine Referenz.

    Geht das irgendwie?

    Was willst du machen?

    Struppi.

    1. ich habe eine ganz kurze und vermutlich einfache Frage. Hat Javascript Referenzen wie PHP sie hat?

      nein. In JS ist alles, ausser einfachen Datentypen, eine Referenz.

      Geht das irgendwie?

      Was willst du machen?

      Struppi.

      Ich schreibe eine rekursive Funktion, die über DOM alle Knoten eines Knotennamens ermittelt und das Objekt in einem 1-dimensionalen Array speichert. Dafür wollte ich den Array außerhalb der Funktion definieren (leer) und an die Funktion referenziert übergeben, damit die Funktion bei Treffern die Objekte im Array ablegt.

      1. Struppi.

        Bitte keinen Fullquote, zitiere nur das worauf deine Antowrt sich bezieht, Danke.

        Ich schreibe eine rekursive Funktion, die über DOM alle Knoten eines Knotennamens ermittelt und das Objekt in einem 1-dimensionalen Array speichert. Dafür wollte ich den Array außerhalb der Funktion definieren (leer) und an die Funktion referenziert übergeben,

        Array werden immer als Referenz übergeben.

        Struppi.

      2. Dafür wollte ich den Array außerhalb der Funktion definieren (leer) und an die Funktion referenziert übergeben, damit die Funktion bei Treffern die Objekte im Array ablegt.

        Wenn du das Array als globale Variable anlegst hat jede Funktion Zugriff darauf. Du musst es dann nicht nochmals extra referenzieren oder sonstwie der Funktion bekannt machen.

        1. Dafür wollte ich den Array außerhalb der Funktion definieren (leer) und an die Funktion referenziert übergeben, damit die Funktion bei Treffern die Objekte im Array ablegt.
          Wenn du das Array als globale Variable anlegst hat jede Funktion Zugriff darauf. Du musst es dann nicht nochmals extra referenzieren oder sonstwie der Funktion bekannt machen.

          Globale Variabeln sind immer eine schlechte Lösung, aber er muss sowieso nichts referenzieren, da wie schon gesagt, Arrays immer referenziert werden.

          var arr = [];  
          function add(p, val) {p.push(val);}  
          add(arr, 1);  
          add(arr, 2);  
          alert(arr);  
          
          

          Struppi.

          1. Globale Variabeln sind immer eine schlechte Lösung,

            var arr = [];
            ...

              
            Nanu? Ist arr hier nicht gerade auch eine globale Variable? Ist arr mithin der Funktion nicht sowieso bekannt? Ist demnach  
              
            ~~~javascript
            var arr = [];  
            function add(val) {arr.push(val);}  
            add(1);  
            add(2);  
            alert(arr);
            

            nicht gleichwertig (mal abgesehen von der Mehrfach-Verwendbarkeit der Funktion)?

            1. Nanu? Ist arr hier nicht gerade auch eine globale Variable? Ist arr mithin der Funktion nicht sowieso bekannt? Ist demnach

              Natürlich ist arr hier global, das Beispiel sollte lediglich zeigen dass Arrays als Referenzen übergeben werden. es ist kein Beispiel um zu zeigen was schlecht an globalen Variabeln ist.

              Struppi.

              1. Hallo Struppi,

                Natürlich ist arr hier global

                Hier hättest du gar nicht zurückzurudern brauchen. So natürlich ist das nicht, denn mit "var" deklarierte Variablen sind ja nur dann ausnahmsweise global, wenn sie im globalen Kontext deklariert werden, was dein Code-Schnipsel aber nicht zwingend nahelegt.

                Gruß, Don P

                1. Hier hättest du gar nicht zurückzurudern brauchen. So natürlich ist das nicht, denn mit "var" deklarierte Variablen sind ja nur dann ausnahmsweise global, wenn sie im globalen Kontext deklariert werden, was dein Code-Schnipsel aber nicht zwingend nahelegt.

                  Variablen, die via "var" definiert wurden, sind immer lokal, selbst, wenn sie zum windows-Objekt gehören. Klar ist das ein akademischer Aspekt, da es oberhalb von windows kein Objekt gibt, sodass alles, was zu windows gehört, quasi-global ist, da alle JS-Objekte in der Hierarchie unter windows liegen. Das ändert aber nichts daran, dass var die Gültigkeit der Variable auf das windows-Objekt und untergeordnete beschränkt :)

                  Siechfred

                  --
                  Nein, Sir, wir vom Moderatorenteam haben keinerlei Humor, von dem wir wüssten.