Sobes.tech
Junior

Ako rozumieš, čo je odovzdanie odkazom?

sobes.tech AI

Odpoveď od AI

V JavaScripte sa primitívne dátové typy (reťazce, čísla, logické hodnoty, null, undefined, Symbol, BigInt) sa odovzdávajú hodnotou. To znamená, že pri priraďovaní alebo odovzdávaní do funkcie sa kopíruje samotná hodnota.

Objekty (vrátane polí a funkcií) sa odovzdávajú a kopírujú referenciou. V skutočnosti sa nekopíruje samotný objekt, ale referencia na oblasť pamäte, kde je uložený.

// Odovzdanie hodnotou
let a = 10;
let b = a; // Kopíruje hodnotu 10
b = 20;
console.log(a); // 10, zmena 'b' neovplyvní 'a'

// Odovzdanie referenciou
let obj1 = { value: 10 };
let obj2 = obj1; // Kopíruje referenciu na objekt
obj2.value = 20;
console.log(obj1.value); // 20, zmeny cez 'obj2' ovplyvňujú 'obj1', pretože ukazujú na ten istý objekt

Keď odovzdávame objekt do funkcie, funkcia dostane kópiu referencie. Zmena vlastností objektu vo vnútri funkcie ovplyvní pôvodný objekt, pretože referencia je rovnaká. Ak však vo vnútri funkcie priradíme novému objektu premennú, pôvodný objekt zostane nezmenený, pretože referencia bude ukazovať na inú oblasť pamäte.

function modifyObject(obj) {
  obj.newValue = 30; // Mění pôvodný objekt
}

function assignNewObject(obj) {
  obj = { anotherValue: 40 }; // Premenná 'obj' vo vnútri funkcie teraz ukazuje na nový objekt
}

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

let anotherObject = { initialValue: 10 };
assignNewObject(anotherObject);
console.log(anotherObject); // { initialValue: 10 }, pôvodný objekt sa nezmenil