Sobes.tech
Junior

Jak rozumíš, co je předání odkazem?

sobes.tech AI

Odpověď od AI

V JavaScriptu jsou primitivní datové typy (řetězce, čísla, logické hodnoty, null, undefined, Symbol, BigInt) předávány hodnotou. To znamená, že při přiřazení nebo předání do funkce se kopíruje samotná hodnota.

Objekty (včetně polí a funkcí) jsou předávány a kopírovány odkazem. Ve skutečnosti se nekopíruje samotný objekt, ale odkaz na oblast paměti, kde je uložen.

// Předání hodnotou
let a = 10;
let b = a; // Kopíruje hodnotu 10
b = 20;
console.log(a); // 10, změna 'b' neovlivní 'a'

// Předání odkazem
let obj1 = { value: 10 };
let obj2 = obj1; // Kopíruje odkaz na objekt
obj2.value = 20;
console.log(obj1.value); // 20, změny přes 'obj2' ovlivní 'obj1', protože odkazují na stejný objekt

Při předání objektu do funkce, funkce obdrží kopii odkazu. Změny vlastností objektu uvnitř funkce ovlivní původní objekt, protože odkaz je stejný. Pokud však uvnitř funkce přiřadíme novému objektu proměnnou, původní objekt zůstane nezměněn, protože odkaz bude ukazovat na jinou oblast paměti.

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

function assignNewObject(obj) {
  obj = { anotherValue: 40 }; // Proměnná 'obj' uvnitř funkce nyní 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 se nezměnil