Hogyan érted, mi az a hivatkozás szerinti átadás?
sobes.tech MI
Válasz az MI-től
A JavaScript-ben az alapvető adattípusok (karakterláncok, számok, logikai értékek, null, undefined, Symbol, BigInt) érték szerint kerülnek átadásra. Ez azt jelenti, hogy hozzárendelés vagy függvénybe való átadás esetén maga az érték másolódik.
A objektumok (beleértve a tömböket és a függvényeket) referencia szerint kerülnek átadásra és másolásra. Valójában nem az objektumot másolják, hanem a memóriában lévő helyre mutató hivatkozást.
// Érték szerinti átadás
let a = 10;
let b = a; // A 10 érték másolódik
b = 20;
console.log(a); // 10, a 'b' módosítása nem befolyásolja az 'a'-t
// Referencia szerinti átadás
let obj1 = { value: 10 };
let obj2 = obj1; // A hivatkozás másolódik
obj2.value = 20;
console.log(obj1.value); // 20, a 'obj2'-n keresztüli módosítások hatással vannak az 'obj1'-re, mivel ugyanarra az objektumra mutatnak
Amikor egy objektumot átadunk egy függvénynek, a függvény egy másolatot kap a referenciáról. Az objektum tulajdonságainak módosítása a függvényen belül hatással lesz az eredeti objektumra, mert a referencia ugyanaz. Azonban, ha a függvényben egy új objektumot rendelünk hozzá a változóhoz, az eredeti objektum változatlan marad, mert a referencia másik memóriaterületre mutat.
function modifyObject(obj) {
obj.newValue = 30; // Az eredeti objektum módosítása
}
function assignNewObject(obj) {
obj = { anotherValue: 40 }; // A 'obj' változó a függvényen belül most egy új objektumra mutat
}
let myObject = { initialValue: 10 };
modifyObject(myObject);
console.log(myObject); // { initialValue: 10, newValue: 30 }
let anotherObject = { initialValue: 10 };
assignNewObject(anotherObject);
console.log(anotherObject); // { initialValue: 10 }, az eredeti objektum nem változott