JavaScript Fundamentals

JavaScript Parameterübergabe verstehen: Call by Value und Call by Reference

Spread the love

Die Parameterübergabe in JavaScript ist eine häufige Quelle von Verwirrung und wird oft als Pass-by-Reference oder Pass-by-Value diskutiert. Die Realität ist differenzierter: JavaScript verwendet einen Mechanismus, der Aspekte beider Methoden kombiniert, abhängig vom jeweiligen Datentyp.

Inhaltsverzeichnis

Pass-by-Value mit primitiven Datentypen verstehen

JavaScripts primitive Datentypen – number, string, boolean, null, undefined, bigint und symbol – funktionieren mit Pass-by-Value. Wird ein primitiver Datentyp an eine Funktion übergeben, wird eine Kopie seines Werts erstellt und übergeben. Modifikationen innerhalb der Funktion beeinflussen nur diese Kopie, die Originalvariable bleibt unverändert.


let x = 10;

function changeValue(y) {
  y = 20;
}

changeValue(x);
console.log(x); // Ausgabe: 10

In diesem Beispiel ändert die Veränderung von y innerhalb von changeValue das originale x nicht.

Pass-by-Reference mit Objekten verstehen

Objekte in JavaScript (inklusive Arrays und Funktionen) verhalten sich anders. Wird ein Objekt an eine Funktion übergeben, wird eine Referenz übergeben – ein Zeiger auf die Speicheradresse des Objekts. Daher wirken sich alle Modifikationen der Objekteigenschaften *innerhalb* der Funktion direkt auf das Originalobjekt aus.


let myArray = [1, 2, 3];

function modifyArray(arr) {
  arr.push(4);
}

modifyArray(myArray);
console.log(myArray); // Ausgabe: [1, 2, 3, 4]

Hier wird myArray modifiziert, weil die Funktion das Objekt selbst verändert, nicht eine Kopie.

Es gibt jedoch einen wichtigen Unterschied: Das Neuzuweisen des Parameters auf ein *neues* Objekt innerhalb der Funktion verändert das Original *nicht*.


let myObject = { a: 1 };

function reassignObject(obj) {
  obj = { a: 2 }; // Zuweisung eines neuen Objekts
}

reassignObject(myObject);
console.log(myObject); // Ausgabe: { a: 1 }

Innerhalb von reassignObject zeigt obj auf ein anderes Objekt; das originale myObject bleibt unverändert.

Pass-by-Value und Pass-by-Reference in JavaScript vereinen

Die Parameterübergabe in JavaScript ist weder rein das eine noch das andere. Es ist ein kontextabhängiges System:

  • Primitive Datentypen: Pass-by-Value. Eine Kopie des Werts wird übergeben; interne Änderungen beeinflussen das Original nicht.
  • Objekte: Pass-by-Reference. Eine Referenz auf das Objekt wird übergeben; Änderungen an den Objekteigenschaften beeinflussen das Original. Das Neuzuweisen des Parameters auf ein neues Objekt innerhalb der Funktion lässt das Original unverändert.

Die Beherrschung dieses Unterschieds ist entscheidend für das Schreiben robusten und vorhersehbaren JavaScript-Codes. Das Verhalten hängt vollständig davon ab, ob Sie mit primitiven Datentypen oder Objekten arbeiten.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert