TS: Call by Reference

Hello,

Call by Reference scheint es für Funktionsargumente in JavaScript wohl nicht zu geben?

Wie kann ich trotzdem einen Wert innerhalb einer Funktion verändern (zusätzlich zum Rückgabewert), ohne globale Variablen benutzen zu müssen?

Liebe Grüße
Tom S.

--
Es gibt nichts Gutes, außer man tut es
Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.

akzeptierte Antworten

  1. Call by Reference scheint es für Funktionsargumente in JavaScript wohl nicht zu geben?

    Alle Datentypen, bis auf Object, definieren unveränderbare Werte (Werte, die nicht verändert werden können).

    1. Hello,

      Call by Reference scheint es für Funktionsargumente in JavaScript wohl nicht zu geben?

      Alle Datentypen, bis auf Object, definieren unveränderbare Werte (Werte, die nicht verändert werden können).

      Danke, nun hab ich's hinbekommen ;-)

      Liebe Grüße
      Tom S.

      --
      Es gibt nichts Gutes, außer man tut es
      Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.
    2. Hello,

      noch eine weitere Frage dazu:
      Wenn ich in der Argumentliste ein Objekt übergebe, kann ich das Argument optional machen oder z. B. vorbelegen mit NULL, wenn es nicht angegeben werden soll? In PHP und anderen Sprachen geht sowas ja.

      Liebe Grüße
      Tom S.

      --
      Es gibt nichts Gutes, außer man tut es
      Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.
      1. Tach!

        Wenn ich in der Argumentliste ein Objekt übergebe, kann ich das Argument optional machen oder z. B. vorbelegen mit NULL, wenn es nicht angegeben werden soll? In PHP und anderen Sprachen geht sowas ja.

        Parameter sind generell optional. Wenn du einen (und die nachfolgenden) nicht übergibst, ist der Wert in den Parametern undefined.

        dedlfix.

      2. Hallo

        Wenn ich in der Argumentliste ein Objekt übergebe, kann ich das Argument optional machen oder z. B. vorbelegen mit NULL, wenn es nicht angegeben werden soll?

        Wie dedlfix bereits schrieb, wird ein formaler Parameter für den beim Aufruf kein Argument übergeben wurde grundsätzlich mit dem Wert undefined initialisiert:

        function f (x) {
          console.log(typeof x);
        }
        
        f(); // undefined
        

        Es genügt also im Prinzip, den optionalen Parameter ans Ende der Parameterliste zu setzen und dann innerhalb des Funktionskörpers zu prüfen, ob ein Wert übergeben wurde oder nicht.

        Das hat allerdings den Nachteil, dass man in den Körper der Funktion hinein schauen muss, um zu erkennen, dass der Parameter optional ist. Darüber hinaus ergibt eine Prüfung der Eigenschaft length des Funktionsobjektes nicht das richtige Ergebnis:

        function f (a, b) {
          if (b == undefined) {
            // do something without b
          }
        }
        
        console.log(f.length); // 2
        

        Obwohl der zweite Parameter in diesem Beispiel nicht zwingend gebraucht wird, sieht es von außen betrachtet so aus, als würde die Funktion zwei Parameter benötigen.

        Besser wäre es, direkt in der Parameterliste einen Standardwert für den Parameter festzulegen, also zum Beispiel null, wobei als Wert ein beliebiger Ausdruck notiert werden kann.

        function f (a, b = null) {
          // do something with or without b
        }
        
        console.log(f.length); // 1
        

        Wird die Funktion nur mit einem Argument aufgerufen, wird der zweite Parameter mit dem Wert null initialisiert. Zudem wird der optionale Parameter der Funktion bei der Berechnung des Wertes der Eigenschaft length nicht berücksichtigt.

        Es ist nun auch von außen sichtbar, dass beim Aufruf der Funktion nur ein Argument übergeben werden muss; und selbst wenn man die Funktionsdefinition vor Augen hat, muss man nicht mehr im Körper der Funktion nachsehen, ob der zweite Parameter eventuell optional ist.

        Gruß,

        Orlok

        1. Hello,

          Jau danke. So dachte ich mir das auch. Habe es bisher aber noch nicht soweit gebracht...
          Mir raucht noch der Kopf von den spezialitäten des DOM in JS.

          Schluss für heute ;-)

          Liebe Grüße
          Tom S.

          --
          Es gibt nichts Gutes, außer man tut es
          Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.