Junior
Kuidas töötab andmete edastamine viitega ja väärtusega?
sobes.tech AI
Vastus AI-lt
Andmeedastamine väärtuse (by value) ja viitega (by reference) määrab, kuidas algne muutuja muutub selle edastamisel funktsiooni või omistamisel.
Väärtuse edastamine:
Loob muutuja väärtuse koopia. Kõik selle koopias tehtud muudatused ei mõjuta algset muutujat. Sobib primitiivsetele andmetüüpidele (arvud, stringid, boolean, null, undefined, Symbol, BigInt).
// Väärtuse edastamine
let a = 10;
function modifyValue(num) {
num = 20; // muudetakse koopia
}
modifyValue(a);
console.log(a); // väljastab 10 - algne väärtus ei muutunud
Viide:
Ei edastata ise väärtust, vaid viidet (mäluaadress) sellele väärtusele. Muudatused selle viitega mõjutavad algset muutujat. JavaScriptis kasutatakse objekte (sh massiive ja funktsioone). Oluline on mõista, et edastatakse mitte objekt ise, vaid viide sellele. Funktsiooni parameetri edastamisel omistatakse viidetele uus väärtus, kuid algne objekt ei muutu.
// Objektide viide
let obj1 = { value: 10 };
function modifyObject(obj) {
obj.value = 20; // muudetakse objekti omadus
}
modifyObject(obj1);
console.log(obj1.value); // väljastab 20 - algne objekt muutus
// Parameetri ümbermääramise näide
let obj2 = { value: 10 };
function reassignObject(obj) {
obj = { value: 30 }; // obj viitab uuele objektile
}
reassignObject(obj2);
console.log(obj2.value); // väljastab 10 - algne objekt ei muutunud
| Omadus | Väärtuse edastamine | Viitega (referentsiga) |
|---|---|---|
| Mis edastatakse | Väärtuse koopia | Viide väärtusele |
| Mõju algsele | Ei | Jah (omaduste muutmisel) |
| JS andmetüübid | Primitivsed tüübid | Objekti tüübid |