Sobes.tech
Junior

Ինչպես է աշխատում տվյալների փոխանցումը հղումով և արժեքով?

sobes.tech AI

Պատասխան AI-ից

Տվյալների փոխանցում արժեքով (by value) և հղումով (by reference) որոշում է, թե ինչպես է փոփոխվում բնօրինակի փոփոխականը փոխանցման կամ նշանակման ժամանակ:

Արժեքով փոխանցում:

Ստեղծվում է փոփոխականի արժեքի պատճենը: Այս պատճենում կատարված ցանկացած փոփոխություն չի ազդում բնօրինակի վրա: Հարմար է հիմնական տիպերի համար (թիվեր, տողեր, բուլյան արժեքներ, null, undefined, Symbol, BigInt):

// Արժեքով փոխանցում
let a = 10;

function modifyValue(num) {
  num = 20; // փոփոխվում է պատճենը
}

modifyValue(a);
console.log(a); // կտպի 10 - բնօրինակի արժեքը չի փոխվել

Հղումով փոխանցում:

Փոխանցվում է ոչ թե արժեքը, այլ հղումը (հիշողության հասցեն) այդ արժեքին: Փոփոխությունները, որոնք կատարվում են այս հղումով, ազդում են բնօրինակի վրա: JavaScript-ում դա կիրառվում է օբյեկտների (ներառյալ զանգվածներ և ֆունկցիաներ) համար: Կարևոր է հասկանալ, որ փոխանցվում է ոչ թե օբյեկտը, այլ հղումը դեպի այն: Ֆունկցիայում պարամետրի վերագրումը նոր արժեքով չի փոխում բնօրինակի օբյեկտը:

// Հղումով փոխանցում (օբյեկտների համար)
let obj1 = { value: 10 };

function modifyObject(obj) {
  obj.value = 20; // փոփոխվում է օբյեկտի հատկությունը
}

modifyObject(obj1);
console.log(obj1.value); // կտպի 20 - բնօրինակի օբյեկտը փոխվել է
// Փոխառաջարկում պարամետրի վերագրում
let obj2 = { value: 10 };

function reassignObject(obj) {
  obj = { value: 30 }; // obj հղվում է նոր օբյեկտին տեղական շրջանակում
}

reassignObject(obj2);
console.log(obj2.value); // կտպի 10 - բնօրինակի օբյեկտը չի փոխվել
Հատկանիշներ Արժեքով փոխանցում Հղումով փոխանցում
Ինչ է փոխանցվում Արժեքի պատճենը Հղում արժեքին
Ինչպես է ազդում բնօրինակի վրա Չի ազդում Փոփոխությունների դեպքում այո
JS տվյալների տեսակներ Պրիմիտիվ տեսակներ Օբյեկտներ