Ինչպես է աշխատում տվյալների փոխանցումը հղումով և արժեքով?
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 տվյալների տեսակներ | Պրիմիտիվ տեսակներ | Օբյեկտներ |