Sobes.tech
Junior

Siz referens orqali o'tkazishni nima ekanligini qanday tushunasiz?

sobes.tech AI

AIdan javob

JavaScriptda, primitiv ma'lumot turlari (matnlar, raqamlar, mantiqiy qiymatlar, null, undefined, Symbol, BigInt) qiymat orqali uzatiladi. Bu shuni anglatadiki, tayinlash yoki funktsiyaga uzatishda, o'zi qiymat nusxalanadi.

Ob'ektlar (jumladan massivlar va funktsiyalar) referens orqali uzatiladi va nusxalanadi. Aslida, ob'ektning o'zi emas, balki u saqlanadigan xotira hududiga referens nusxalanadi.

// Qiymat orqali uzatish
let a = 10;
let b = a; // 10 qiymati nusxalanadi
b = 20;
console.log(a); // 10, 'b' ni o'zgartirish 'a' ga ta'sir qilmaydi

// Referens orqali uzatish
let obj1 = { value: 10 };
let obj2 = obj1; // Ob'ektga referens nusxalanadi
obj2.value = 20;
console.log(obj1.value); // 20, 'obj2' orqali o'zgartirish 'obj1' ga ta'sir qiladi, chunki ular bir xil ob'ektga ishora qiladi

Ob'ektni funktsiyaga uzatganda, funksiya referensning nusxasini oladi. Ob'ektning xususiyatlarini o'zgartirish, asl ob'ektga ta'sir qiladi, chunki referens bir xil. Ammo, agar funktsiya ichida yangi ob'ektga tayinlansa, asl ob'ekt o'zgarmaydi, chunki referens boshqa xotira hududiga ishora qiladi.

function modifyObject(obj) {
  obj.newValue = 30; // Asl ob'ektni o'zgartiradi
}

function assignNewObject(obj) {
  obj = { anotherValue: 40 }; // 'obj' o'zgaruvchisi endi yangi ob'ektga ishora qiladi
}

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

let anotherObject = { initialValue: 10 };
assignNewObject(anotherObject);
console.log(anotherObject); // { initialValue: 10 }, asl ob'ekt o'zgarmadi