Sobes.tech
Junior

Ako funguje prenos dát cez odkaz a cez hodnotu?

sobes.tech AI

Odpoveď od AI

Prenos údajov po hodnote (by value) a po referencii (by reference) určuje, ako sa mení pôvodná premenná pri jej odovzdaní do funkcie alebo pri priraďovaní.

Prenos po hodnote:

Vytvorí sa kópia hodnoty premennej. Akákoľvek zmena tejto kópie vo vnútri funkcie alebo pri priraďovaní neovplyvňuje pôvodnú premennú. Vhodné pre primitívne dátové typy (čísla, reťazce, boolean, null, undefined, Symbol, BigInt).

// Prenos po hodnote
let a = 10;

function modifyValue(num) {
  num = 20; // Kópia sa zmení
}

modifyValue(a);
console.log(a); // Vypíše 10 - pôvodná hodnota sa nezmenila

Prenos po referencii:

Nejde o samotnú hodnotu, ale odkaz (adresa v pamäti) na túto hodnotu. Zmeny vykonané cez tento odkaz ovplyvnia pôvodnú premennú. V JavaScripte sa to týka objektov (vrátane polí a funkcií). Je dôležité pochopiť, že sa neodovzdáva samotný objekt, ale odkaz na neho. Pri prepisovaní parametra vo vnútri funkcie sa odkaz priradí na novú hodnotu, ale pôvodná premenná sa nezmení.

// Prenos po referencii (pre objekty)
let obj1 = { value: 10 };

function modifyObject(obj) {
  obj.value = 20; // Vlastnosť objektu sa mení cez odkaz
}

modifyObject(obj1);
console.log(obj1.value); // Vypíše 20 - pôvodný objekt sa zmenil
// Príklad prepisovania parametra pri odovzdávaní objektu
let obj2 = { value: 10 };

function reassignObject(obj) {
  obj = { value: 30 }; // obj teraz odkazuje na nový objekt v lokálnom rozsahu funkcie
}

reassignObject(obj2);
console.log(obj2.value); // Vypíše 10 - pôvodný objekt sa nezmenil
Charakteristika Prenos po hodnote Prenos po referencii
Čo sa odovzdáva Kópia hodnoty Referencia na hodnotu
Vplyv na originál Nie Áno (pri zmene vlastností)
Typy dát v JS Primitívne hodnoty Objekty