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 |