Sobes.tech
Junior

Cum funcționează transferul de date prin referință și prin valoare?

sobes.tech AI

Răspuns de la AI

Transferul datelor prin valoare (by value) și prin referință (by reference) determină modul în care se modifică variabila originală atunci când este transmisă unei funcții sau atribuită.

Transferul prin valoare:

Se creează o copie a valorii variabilei. Orice modificare a acestei copii în interiorul funcției sau la atribuire nu afectează variabila originală. Este potrivit pentru tipuri de date primitive (numere, șiruri, valori boolean, null, undefined, Symbol, BigInt).

// Transfer prin valoare
let a = 10;

function modifyValue(num) {
  num = 20; // Se modifică copia
}

modifyValue(a);
console.log(a); // Va afișa 10 - valoarea originală nu s-a schimbat

Transferul prin referință:

Nu se transmite valoarea în sine, ci o referință (adresa în memorie) către acea valoare. Modificările făcute prin această referință afectează variabila originală. În JavaScript, acest lucru se aplică obiectelor (inclusiv array-urilor și funcțiilor). Este important să înțelegeți că nu se transmite obiectul în sine, ci o referință către el. Când un parametru este reasignat în interiorul unei funcții, referința primește o nouă valoare, dar variabila originală nu se schimbă.

// Transfer prin referință (pentru obiecte)
let obj1 = { value: 10 };

function modifyObject(obj) {
  obj.value = 20; // Se modifică proprietatea obiectului prin referință
}

modifyObject(obj1);
console.log(obj1.value); // Va afișa 20 - obiectul original s-a schimbat
// Exemplu de reasignare a parametrului la transmiterea unui obiect
let obj2 = { value: 10 };

function reassignObject(obj) {
  obj = { value: 30 }; // obj acum face referire la un nou obiect în scopul local al funcției
}

reassignObject(obj2);
console.log(obj2.value); // Va afișa 10 - obiectul original nu s-a schimbat
Caracteristică Transfer prin valoare Transfer prin referință
Ce se transmite Copie a valorii Referință la valoare
Impact asupra originalului Nu Da (la modificarea proprietăților)
Tipuri de date JS Primitivi Obiecte