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
- Pass-by-Reference mit Objekten verstehen
- Pass-by-Value und Pass-by-Reference in JavaScript vereinen
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.