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 }, оригиналният обект не се е променил