lol1337: Referenzen in JS

Moin,
meine Frage ist bestimmt total einfach und billig, aber durch die "ursprüngliche deutsche Bedeutung" von Referenz finde ich nichts bei google.
Und zwar will ich, dass eine Variable einer Funktion als Referenz übergeben wird. In PHP geht das ja einfach mit

function bla(&$foo){..}  
$asd = 123123;  
foo($asd);

Aber wie geht das in Javascript?

lg
lol1337

  1. Hallo,

    Aber wie geht das in Javascript?

    Das geht nicht in JavaScript. Alles wird immer als Wert übergeben. Man kann nur Werte übergeben, keinen Referenzen auf Variablen, deren Wert man dann ändern könnte.

    Was allerdings geht ist die Übergabe von Objekten. Diese werden als Referenz auf eine Speicherstelle übergeben, d.h. wenn du ihre Eigenschaften änderst, so verweisen andere Variablen außerhalb auf dasselbe, geänderte Objekt.

    var obj = { x: 1 };  
    function changeX (obj) {  
      obj.x = 2;  
    }  
    changeX(obj);  
    alert(obj.x);
    

    Vielleicht hilft dir das weiter.

    Generell hat eine Funktion Zugriff auf alle Variablen des äußeren Scopes, d.h. in deinem Beispiel musst du die Variable nicht übergeben, du hast in der verschachtelten Funktion ohnehin darauf Zugriff:

    var obj = { x: 1 };  
    function changeX () {  
      obj.x = 2;  
    }  
    changeX();  
    alert(obj.x);
    

    Mathias

    1. Okay, danke schonmal :) Letzteres wusste ich bereits, aber das erste könnte mir weiterhelfen. Das Problem ist nur, dass die Eigenschaft des Objekts variabel sein soll, ich möchte also folgendes in etwa machen:

      function change(property, value){  
      property = value;  
      }  
      change(meinObjekt.blabla, 1337);  
      
      

      aber das scheint nicht zu funktionieren bei mir...

      1. Hallo,

        function change(property, value){

        property = value;
        }
        change(meinObjekt.blabla, 1337);

        
        >   
        > aber das scheint nicht zu funktionieren bei mir...  
          
        Wenn du meinObjekt.blabla notierst, so wird dieser Ausdruck zum Wert der Eigenschaft ausgelöst - in der change-Funktion kommt also nur der Wert an.  
          
        Die Variable property ist nur in der Funktion verfügbar - wenn du ihren Wert änderst, ändert sich nur ihr Wert, die Welt außerhalb bleibt unverändert.  
          
        Du müsstest also den Namen der Eigenschaft als String übergeben. Über die Klammerschreibweise kannst du dann die Eigenschaft setzen:  
          
        ~~~javascript
        function change (obj, property, value) {  
          obj[property] = value;  
        }  
        var obj = { x: 1 };  
        change(obj, "x", 2);  
        alert(obj.x);
        

        Mathias

        1. Moin

          [code lang=javascript]function change (obj, property, value) {
            obj[property] = value;
          }

          Mist, doch so einfach^^

          Okay, dank dir für die Hilfe :)

          lg
          lol1337