Назад к вопросам
Junior
82
questionbank

Как ты понимаешь, что такое передача по ссылке?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech 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 }, оригинальный объект не изменился