Junior
Kā jūs saprotat, kas ir atsauces nodošana?
sobes.tech AI
Atbilde no AI
JavaScript primitivie datu tipi (teksti, skaitļi, boolea vērtības, null, undefined, Symbol, BigInt) tiek nodoti pēc vērtības. Tas nozīmē, ka pie piešķiršanas vai funkcijas nodošanas tiek kopēta pati vērtība.
Objekti (ieskaitot masīvus un funkcijas) tiek nodoti un kopēti pēc saites. Faktiski tiek kopēta nevis objekta kopija, bet saite uz atmiņas apgabalu, kur tas atrodas.
// Nodod pēc vērtības
let a = 10;
let b = a; // Tiek kopēta vērtība 10
b = 20;
console.log(a); // 10, izmaiņas 'b' neietekmē 'a'
// Nodod pēc saites
let obj1 = { value: 10 };
let obj2 = obj1; // Tiek kopēta saite uz objektu
obj2.value = 20;
console.log(obj1.value); // 20, izmaiņas caur 'obj2' ietekmē 'obj1', jo tie norāda uz to pašu objektu
Kad objekts tiek nodots funkcijai, funkcija saņem saites kopiju. Izmaiņas objekta īpašībās funkcijas iekšienē ietekmēs oriģinālo objektu, jo saite ir tā pati. Tomēr, ja funkcijas iekšienē piešķir jaunu objektu mainīgajam, oriģinālais objekts paliks nemainīgs, jo saite norādīs uz citu atmiņas apgabalu.
function modifyObject(obj) {
obj.newValue = 30; // Maina oriģinālo objektu
}
function assignNewObject(obj) {
obj = { anotherValue: 40 }; // 'obj' funkcijas iekšienē tagad norāda uz jaunu objektu
}
let myObject = { initialValue: 10 };
modifyObject(myObject);
console.log(myObject); // { initialValue: 10, newValue: 30 }
let anotherObject = { initialValue: 10 };
assignNewObject(anotherObject);
console.log(anotherObject); // { initialValue: 10 }, oriģinālais objekts nav mainījies