Sobes.tech
Junior

Сиз шилтемеге негизделген өткөрүүнү кандай түшүнөсүз?

sobes.tech AI

AIден жооп

JavaScriptте, негизги маалымат түрлөрү (жиптер, сандар, логикалык маанилер, null, undefined, Symbol, BigInt) мааниге ылайык өткөрүлөт. Бул мааниге берүү же функцияга өткөрүүдө, өзү мааниси көчүрүлөт.

Объекттер (тизмелер жана функциялар киргизилген) шилтеме аркылуу өткөрүлөт жана көчүрүлөт. Чындыкта, объекттин өзү эмес, анын сакталган эс тутум аймагынын шилтемеси көчүрүлөт.

// Мааниге ылайык өткөрүү
let a = 10;
let b = a; // 10 мааниси көчүрүлөт
b = 20;
console.log(a); // 10, 'b' өзгөртүүсү 'a'га таасир этпейт

// шилтеме аркылуу өткөрүү
let obj1 = { value: 10 };
let obj2 = obj1; // Объектке шилтеме көчүрүлөт
obj2.value = 20;
console.log(obj1.value); // 20, 'obj2' аркылуу жасалган өзгөртүүлөр 'obj1'га таасир этет, себеби алар бир эле объектке шилтөө кылышат

Объектти функцияга өткөргөндө, функция шилтеменин көчүрмөсүн алат. Объекттин мүнөздөмөлөрүн өзгөртүү, оригиналдуу объектке таасир этет, себеби шилтеме бирдей. Бирок, функция ичинде жаңы объектке белгилөө болсо, оригиналдуу объект өзгөрбөйт, себеби шилтеме башка эс тутум аймагына көрсөтөт.

function modifyObject(obj) {
  obj.newValue = 30; // Оригиналдуу объектти өзгөртөт
}

function assignNewObject(obj) {
  obj = { anotherValue: 40 }; // 'obj' өзгөрмөсү функция ичинде жаңы объектке көрсөтөт
}

let myObject = { initialValue: 10 };
modifyObject(myObject);
console.log(myObject); // { initialValue: 10, newValue: 30 }

let anotherObject = { initialValue: 10 };
assignNewObject(anotherObject);
console.log(anotherObject); // { initialValue: 10 }, оригиналдуу объект өзгөрбөйт