Heim >Web-Frontend >js-Tutorial >Wie geht JavaScript mit Pass-by-Value und Pass-by-Reference bei primitiven Typen und Objekten um?

Wie geht JavaScript mit Pass-by-Value und Pass-by-Reference bei primitiven Typen und Objekten um?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-18 12:54:11956Durchsuche

How Does JavaScript Handle Pass-by-Value and Pass-by-Reference with Primitive Types and Objects?

JavaScript Pass-by-Value vs. Pass-by-Reference

In JavaScript werden alle Variablen als Wert übergeben, was bedeutet, dass es sich um eine Kopie des Originalwerts handelt wird erstellt und an die Funktion übergeben. Wenn der Wert jedoch ein Objekt ist, beispielsweise ein Array oder ein Objektliteral, ist die Kopie ein Verweis auf das Originalobjekt.

Auswirkungen auf Funktionsargumente

  • Grundelement: Wenn ein Grundelement (z. B. eine Zahl, eine Zeichenfolge) an eine Funktion übergeben wird, sind alle an diesem Wert innerhalb der Funktion vorgenommenen Änderungen begrenzt auf den lokalen Bereich der Funktion und wirken sich nicht auf die ursprüngliche Variable außerhalb der Funktion aus.
  • Objektreferenz: Wenn eine Objektreferenz an eine Funktion übergeben wird, werden Änderungen an den Eigenschaften des Objekts innerhalb vorgenommen Die Funktion spiegelt sich im Originalobjekt wider, auch außerhalb der Funktion.

Auswirkungen auf Variablen außerhalb Funktionen

  • Übergabe als Referenz: Objektreferenzen werden als Referenz übergeben, was bedeutet, dass Änderungen, die an den Eigenschaften des Objekts innerhalb einer Funktion vorgenommen werden, Auswirkungen auf die Eigenschaften des ursprünglichen Objekts haben. Aber alle innerhalb der Funktion an der Referenz selbst vorgenommenen Änderungen (z. B. Neuzuweisung) haben keinen Einfluss auf das Original Variable.
  • Pass-by-Value: Primitive Werte und Objektreferenzen, die als Wert übergeben werden, haben keinen Einfluss auf die ursprüngliche Variable außerhalb der Funktion.

Beispiele

function f(a, b, c) {
  a = 3; // Reassignment changes the local variable only.
  b.push("foo"); // Property change affects the original object.
  c.first = false; // Property change affects the original object.
}

const x = 4;
let y = ["eeny", "miny", "mo"];
let z = { first: true };
f(x, y, z);

console.log(x, y, z.first); // Output: 4, ["eeny", "miny", "mo", "foo"], false

Im obigen Beispiel spiegeln sich die Änderungen an den b- und c-Objekten in den Originalobjekten wider. während die Neuzuweisung von a keine Auswirkung hat.

Ausführliche Beispiele:

function f() {
  const a = ["1", "2", { foo: "bar" }];
  const b = a[1]; // Copy the reference to the original array element
  a[1] = "4"; // Change the value in the original array
  console.log(b); // Output: "2" (Original value of the copied reference)
}

Im ersten Beispiel gilt b immer noch, obwohl a geändert wurde der ursprüngliche Wert, da es sich um eine Kopie der Referenz handelt.

function f() {
  const a = [{ yellow: "blue" }, { red: "cyan" }, { green: "magenta" }];
  const b = a[1]; // Copy the reference to the original object
  a[1].red = "tan"; // Change the property in the original object
  console.log(b.red); // Output: "tan" (Property change is reflected in both variables)
  b.red = "black"; // Change the property through the reference
  console.log(a[1].red); // Output: "black" (Property change is reflected in both variables)
}

Im zweiten Beispiel wirkt sich die Änderung an a[1].red sowohl auf a als auch auf b aus, weil sie teilen Sie die gleiche Objektreferenz.

Erstellen unabhängiger Kopien

Um eine völlig unabhängige Kopie eines Objekts zu erstellen, können Sie JSON.parse() und JSON.stringify verwenden ()-Methoden zum Deserialisieren bzw. Serialisieren des Objekts. Zum Beispiel:

const originalObject = { foo: "bar" };
const independentCopy = JSON.parse(JSON.stringify(originalObject));

Das obige ist der detaillierte Inhalt vonWie geht JavaScript mit Pass-by-Value und Pass-by-Reference bei primitiven Typen und Objekten um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn