Sobes.tech
Junior

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