Junior
Kako shvatiš šta je prosleđivanje po referenci?
sobes.tech АИ
Одговор од АИ
U JavaScript-u, primitivni tipovi podataka (nizovi, brojevi, logičke vrednosti, null, undefined, Symbol, BigInt) se prosleđuju po vrednosti. To znači da se pri dodeljivanju ili prosleđivanju funkciji kopira sama vrednost.
Objekti (uključujući nizove i funkcije) se prosleđuju i kopiraju po referenci. U stvari, ne kopira se sam objekat, već referenca na memorijsku oblast gde je on smešten.
// Prosleđivanje po vrednosti
let a = 10;
let b = a; // Kopira vrednost 10
b = 20;
console.log(a); // 10, promena 'b' ne utiče na 'a'
// Prosleđivanje po referenci
let obj1 = { value: 10 };
let obj2 = obj1; // Kopira referencu na objekat
obj2.value = 20;
console.log(obj1.value); // 20, promene preko 'obj2' utiču na 'obj1' jer ukazuju na isti objekat
Kada prosleđujemo objekat funkciji, funkcija dobija kopiju reference. Promena svojstava objekta unutar funkcije će uticati na originalni objekat, jer je referenca ista. Međutim, ako unutar funkcije dodelimo novi objekat promenljivoj, originalni objekat će ostati nepromenjen, jer će referenca ukazivati na drugu memorijsku oblast.
function modifyObject(obj) {
obj.newValue = 30; // Menja originalni objekat
}
function assignNewObject(obj) {
obj = { anotherValue: 40 }; // Promenljiva 'obj' unutar funkcije sada ukazuje na novi objekat
}
let myObject = { initialValue: 10 };
modifyObject(myObject);
console.log(myObject); // { initialValue: 10, newValue: 30 }
let anotherObject = { initialValue: 10 };
assignNewObject(anotherObject);
console.log(anotherObject); // { initialValue: 10 }, originalni objekat nije promenjen