Kaip veikia duomenų perdavimas per nuorodą ir per reikšmę?
sobes.tech AI
Atsakymas iš AI
Duomenų perdavimas reikšme (by value) ir nuoroda (by reference) apibrėžia, kaip keičiasi originali kintamoji perduodant ją į funkciją arba priskiriant.
Perdavimas reikšme:
Sukuriama kintamojo reikšmės kopija. Bet kokie pakeitimai šioje kopijoje funkcijos ar priskyrimo metu nepaveikia originalios kintamosios. Tinka pirminiams duomenų tipams (skaičiai, eilutės, loginės reikšmės, null, undefined, Symbol, BigInt).
// Perdavimas reikšme
let a = 10;
function modifyValue(num) {
num = 20; // keičiama kopija
}
modifyValue(a);
console.log(a); // išves 10 - originali reikšmė nepasikeitė
Nuoroda:
Perduodama ne pati reikšmė, o nuoroda (atminties adresas) į tą reikšmę. Pakeitimai per šią nuorodą veikia originalią kintamąją. JavaScript naudojama objektams (įskaitant masyvus ir funkcijas). Svarbu suprasti, kad perduodama ne objektas, o nuoroda į jį. Funkcijoje parametro perdavimas, nuorodai priskiriama nauja reikšmė, tačiau originalus objektas nepasikeičia.
// Objektų nuoroda
let obj1 = { value: 10 };
function modifyObject(obj) {
obj.value = 20; // keičiasi objekto savybė
}
modifyObject(obj1);
console.log(obj1.value); // išves 20 - originalus objektas pasikeitė
// Pakeitimo pavyzdys
let obj2 = { value: 10 };
function reassignObject(obj) {
obj = { value: 30 }; // obj nuoroda į naują objektą
}
reassignObject(obj2);
console.log(obj2.value); // išves 10 - originalus objektas nepasikeitė
| Savybė | Perdavimas reikšme | Nuoroda (referencija) |
|---|---|---|
| Kas perduodama | Reikšmės kopija | Nuoroda į reikšmę |
| Poveikis originalui | Ne | Taip (keičiant savybes) |
| JS duomenų tipai | Pirminiai tipai | Objektai |