In JavaScript gibt es keine "Übergabe per Referenz". Sie können ein Objekt übergeben (d.h. Sie können einen Verweis auf ein Objekt per Wert übergeben) und dann den Inhalt des Objekts durch eine Funktion ändern lassen:
function alterObject(obj) {
obj.foo = "goodbye";
}
var myObj = { foo: "hello world" };
alterObject(myObj);
alert(myObj.foo); // "goodbye" instead of "hello world"
Sie können über die Eigenschaften eines Arrays mit einem numerischen Index iterieren und jede Zelle des Arrays ändern, wenn Sie möchten.
var arr = [1, 2, 3];
for (var i = 0; i < arr.length; i++) {
arr[i] = arr[i] + 1;
}
Es ist wichtig zu wissen, dass der Begriff "Pass-by-Reference" ein sehr spezifischer Begriff ist. Er bedeutet nicht einfach, dass es möglich ist, einen Verweis auf ein veränderbares Objekt zu übergeben. Stattdessen bedeutet es, dass es möglich ist, eine einfache Variable so zu übergeben, dass eine Funktion diesen Wert in der aufrufen Kontext. So:
function swap(a, b) {
var tmp = a;
a = b;
b = tmp; //assign tmp to b
}
var x = 1, y = 2;
swap(x, y);
alert("x is " + x + ", y is " + y); // "x is 1, y is 2"
In einer Sprache wie C++ ist das möglich, weil diese Sprache fait haben (sozusagen) Pass-by-Reference.
bearbeiten - das ist vor kurzem (März 2015) auf Reddit wieder hochgegangen, und zwar wegen eines Blogbeitrags, der meinem unten erwähnten ähnlich ist, allerdings in diesem Fall über Java. Beim Lesen des Hin und Her in den Reddit-Kommentaren fiel mir auf, dass ein großer Teil der Verwirrung auf die unglückliche Kollision mit dem Wort "Referenz" zurückzuführen ist. Die Terminologie "pass by reference" und "pass by value" geht auf das Konzept der "Objekte" in Programmiersprachen zurück. In Wirklichkeit geht es gar nicht um Objekte, sondern um Funktionsparameter und insbesondere darum, wie Funktionsparameter mit der aufrufenden Umgebung "verbunden" sind (oder nicht). Beachten Sie insbesondere, dass in einer echten Pass-by-Reference-Sprache - einer Sprache, die fait Objekte einbeziehen - man hätte immer noch die Möglichkeit, das Objekt zu ändern Inhalt und es würde ziemlich genau so aussehen, wie es in JavaScript der Fall ist. Allerdings würde man auch in der Lage sein, den Objektverweis in der aufrufenden Umgebung zu ändern, und das ist das Wichtigste, was Sie kann nicht in JavaScript zu tun. Eine Pass-by-Reference-Sprache würde nicht die Referenz selbst übergeben, sondern eine Verweis auf die Referenz .
bearbeiten - hier ist ein Blogbeitrag zum Thema. (Beachten Sie den Kommentar zu diesem Beitrag, der erklärt, dass C++ nicht wirklich Pass-by-Reference hat. Das ist richtig. Was C++ jedoch hat, ist die Möglichkeit, Verweise auf einfache Variablen zu erstellen, entweder explizit am Punkt des Funktionsaufrufs, um einen Zeiger zu erstellen, oder implizit beim Aufruf von Funktionen, deren Argumenttypsignatur dies erfordert. Das sind die wichtigsten Dinge, die JavaScript nicht unterstützt).