Sobes.tech
Junior

Как работи прехвърлянето на данни по референция и по стойност?

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 Примитиви Обекти