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 |