Как работи прехвърлянето на данни по референция и по стойност?
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 | Примитиви | Обекти |