Sobes.tech
Junior

İstinadla ötürmənin nə olduğunu necə başa düşürsən?

sobes.tech Süni İntellekt

AI-dan cavab

JavaScript-də, primitiv məlumat tipləri (sətirlər, ədədlər, məntiqi dəyərlər, null, undefined, Symbol, BigInt) dəyər vasitəsilə ötürülür. Bu, ona görədir ki, təyin etmə və ya funksiyaya ötürmə zamanı, dəyər özü kopyalanır.

Obyektlər (massivlər və funksiyalar daxil olmaqla) referans vasitəsilə ötürülür və kopyalanır. Əslində, obyektin özü deyil, onun saxlandığı yaddaş sahəsinə referans kopyalanır.

// Dəyər vasitəsilə ötürmə
let a = 10;
let b = a; // 10 dəyəri kopyalanır
b = 20;
console.log(a); // 10, 'b' dəyişdirilməsi 'a'ya təsir etmir

// Referans vasitəsilə ötürmə
let obj1 = { value: 10 };
let obj2 = obj1; // Obyektə referans kopyalanır
obj2.value = 20;
console.log(obj1.value); // 20, 'obj2' vasitəsilə dəyişikliklər 'obj1'ə təsir edir, çünki onlar eyni obyektə işarə edir

Obyekt funksiyaya ötürüləndə, funksiya referansın kopyasını alır. Ob'ektin xüsusiyyətlərini dəyişdirmək, orijinal obyektə təsir edəcək, çünki referans eynidir. Ancaq, funksiyada dəyişənə yeni obyekt təyin edilərsə, orijinal obyekt dəyişməz qalacaq, çünki referans başqa yaddaş sahəsinə işarə edəcək.

function modifyObject(obj) {
  obj.newValue = 30; // Orijinal obyekti dəyişir
}

function assignNewObject(obj) {
  obj = { anotherValue: 40 }; // 'obj' dəyişənində artıq yeni obyektə işarə edir
}

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

let anotherObject = { initialValue: 10 };
assignNewObject(anotherObject);
console.log(anotherObject); // { initialValue: 10 }, orijinal obyekt dəyişməyib