Sobes.tech
Junior

Jak funguje přenos dat přes odkaz a přes hodnotu?

sobes.tech AI

Odpověď od AI

Přenos dat po hodnotě (by value) a po referenci (by reference) určuje, jak se mění původní proměnná při předání funkci nebo při přiřazení.

Přenos po hodnotě:

Vytvoří se kopie hodnoty proměnné. Jakákoli změna této kopie uvnitř funkce nebo při přiřazení neovlivní původní proměnnou. Vhodné pro primitivní datové typy (čísla, řetězce, boolean, null, undefined, Symbol, BigInt).

// Přenos po hodnotě
let a = 10;

function modifyValue(num) {
  num = 20; // Kopie se změní
}

modifyValue(a);
console.log(a); // Vypíše 10 - původní hodnota se nezměnila

Přenos po referenci:

Nejde o samotnou hodnotu, ale o odkaz (adresu v paměti) na tuto hodnotu. Změny provedené přes tento odkaz ovlivní původní proměnnou. V JavaScriptu se to týká objektů (včetně polí a funkcí). Je důležité pochopit, že se nepředává samotný objekt, ale odkaz na něj. Při přepsání parametru uvnitř funkce je odkaz přiřazen nové hodnotě, ale původní proměnná se nezmění.

// Přenos po referenci (pro objekty)
let obj1 = { value: 10 };

function modifyObject(obj) {
  obj.value = 20; // Vlastnost objektu se mění přes odkaz
}

modifyObject(obj1);
console.log(obj1.value); // Vypíše 20 - původní objekt se změnil
// Příklad přepsání parametru při předání objektu
let obj2 = { value: 10 };

function reassignObject(obj) {
  obj = { value: 30 }; // obj nyní odkazuje na nový objekt v lokálním rozsahu funkce
}

reassignObject(obj2);
console.log(obj2.value); // Vypíše 10 - původní objekt se nezměnil
Charakteristika Přenos po hodnotě Přenos po referenci
Co se předává Kopie hodnoty Odkaz na hodnotu
Dopad na originál Ne Ano (při změně vlastností)
Typy dat v JS Primitivní hodnoty Objekty