Sobes.tech
Junior

Cum înțelegi ce înseamnă transmiterea prin referință?

sobes.tech AI

Răspuns de la AI

În JavaScript, tipurile de date primitive (șiruri de caractere, numere, valori booleene, null, undefined, Symbol, BigInt) sunt transmise prin valoare. Aceasta înseamnă că, la atribuiri sau la transmiterea către o funcție, valoarea în sine este copiată.

Obiectele (inclusiv array-urile și funcțiile) sunt transmise și copiate prin referință. În realitate, nu se copiază obiectul în sine, ci referința către zona de memorie în care acesta este stocat.

// Transmitere prin valoare
let a = 10;
let b = a; // Se copiază valoarea 10
b = 20;
console.log(a); // 10, modificarea lui 'b' nu afectează pe 'a'

// Transmitere prin referință
let obj1 = { value: 10 };
let obj2 = obj1; // Se copiază referința către obiect
obj2.value = 20;
console.log(obj1.value); // 20, modificările prin 'obj2' afectează 'obj1' deoarece indică același obiect

Când se transmite un obiect într-o funcție, funcția primește o copie a referinței. Modificarea proprietăților obiectului în interiorul funcției va afecta obiectul original, deoarece referința este aceeași. Cu toate acestea, dacă în interiorul funcției se atribuie un nou obiect variabilei, obiectul original va rămâne neschimbat, deoarece referința va indica către o altă zonă de memorie.

function modifyObject(obj) {
  obj.newValue = 30; // Modifică obiectul original
}

function assignNewObject(obj) {
  obj = { anotherValue: 40 }; // Variabila 'obj' din interiorul funcției indică acum către un nou obiect
}

let myObject = { initialValue: 10 };
modifyObject(myObject);
console.log(myObject); // { initialValue: 10, newValue: 30 }

let anotherObject = { initialValue: 10 };
assignNewObject(anotherObject);
console.log(anotherObject); // { initialValue: 10 }, obiectul original nu s-a schimbat