Sobes.tech
Junior

Hoe werkt gegevensoverdracht via referentie en via waarde?

sobes.tech AI

Antwoord van AI

Gegevensoverdracht per waarde (by value) en per referentie (by reference) bepaalt hoe de originele variabele verandert bij het doorgeven aan een functie of bij toewijzing.

Overdracht per waarde:

Er wordt een kopie van de waarde van de variabele gemaakt. Elke wijziging aan deze kopie binnen de functie of bij toewijzing heeft geen invloed op de originele variabele. Geschikt voor primitieve datatypes (getallen, strings, booleans, null, undefined, Symbol, BigInt).

// Overdracht per waarde
let a = 10;

function modifyValue(num) {
  num = 20; // Kopie wordt gewijzigd
}

modifyValue(a);
console.log(a); // Toont 10 - de originele waarde is niet veranderd

Overdracht per referentie:

In plaats van de waarde zelf wordt een referentie (adres in geheugen) naar die waarde doorgegeven. Veranderingen via deze referentie beïnvloeden de originele variabele. In JavaScript wordt dit gebruikt voor objecten (inclusief arrays en functies). Het is belangrijk te begrijpen dat niet het object zelf wordt doorgegeven, maar een referentie ernaar. Bij het hertoewijzen van een parameter binnen een functie wordt de referentie een nieuwe waarde toegekend, maar de originele variabele verandert niet.

// Overdracht per referentie (voor objecten)
let obj1 = { value: 10 };

function modifyObject(obj) {
  obj.value = 20; // Het object wordt via referentie gewijzigd
}

modifyObject(obj1);
console.log(obj1.value); // Toont 20 - het originele object is gewijzigd
// Voorbeeld van hertoewijzing van de parameter bij het doorgeven van een object
let obj2 = { value: 10 };

function reassignObject(obj) {
  obj = { value: 30 }; // obj verwijst nu naar een nieuw object in de lokale scope van de functie
}

reassignObject(obj2);
console.log(obj2.value); // Toont 10 - het originele object is niet gewijzigd
Kenmerk Overdracht per waarde Overdracht per referentie
Wat wordt doorgegeven Kopie van de waarde Referentie naar de waarde
Invloed op het origineel Nee Ja (bij het wijzigen van eigenschappen)
JS-gegevens types Primitieven Objecten