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 }, ორიგინალი ობიექტი უცვლელია