Junior
Kaip suprantate, kas yra nuorodos perdavimas?
sobes.tech AI
Atsakymas iš AI
JavaScript'e, pirminiai duomenų tipai (eilutės, skaičiai, loginės reikšmės, null, undefined, Symbol, BigInt) perduodami pagal reikšmę. Tai reiškia, kad priskyrimo ar perdavimo funkcijai metu, kopijuojama pati reikšmė.
Objektai (įskaitant masyvus ir funkcijas) perduodami ir kopijuojami nuoroda. Iš tikrųjų, kopijuojama ne pats objektas, o nuoroda į atminties sritį, kur jis saugomas.
// Perdavimas pagal reikšmę
let a = 10;
let b = a; // Kopijuojama reikšmė 10
b = 20;
console.log(a); // 10, pakeitimai 'b' neveikia 'a'
// Perdavimas pagal nuorodą
let obj1 = { value: 10 };
let obj2 = obj1; // Kopijuojama nuoroda į objektą
obj2.value = 20;
console.log(obj1.value); // 20, pakeitimai per 'obj2' veikia 'obj1', nes jie nurodo į tą patį objektą
Kai perduodame objektą funkcijai, funkcija gauna nuorodos kopiją. Objekto savybių keitimas funkcijos viduje paveiks originalų objektą, nes nuoroda ta pati. Tačiau, jei funkcijos viduje priskiriame naują objektą, originalus objektas liks nepakitęs, nes nuoroda nukreips į kitą atminties sritį.
function modifyObject(obj) {
obj.newValue = 30; // Keičia originalų objektą
}
function assignNewObject(obj) {
obj = { anotherValue: 40 }; // 'obj' funkcijos viduje dabar nurodo į naują 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 }, originalus objektas nepasikeitė