Здесь я коротко покажу поведение значений и объектов при их передаче. Для того, что бы узнать как это работает, читайте об этом в разделе "javascript под капотом/Как хранятся значения и объекты в памяти heap & stack"
Поведение у примитивных значений:
let a = 5, // положили 5 в а
b = a; // потом в b положили a с её 5
b = b + 5; // потом в b положили b + 5
console.log(b); // в сумме 10
console.log(a); // так и осталось 5
Поведение у объектов:
const obj = { // создаем объект
a: 5,
b: 1
};
const copy = obj; // создаем переменную и кладем туда наш объект
copy.a = 10; // обращаемся к нашей копии и меняем a на 10
// наша a перезаписалась везде
console.log(copy.a); // 10
console.log(obj.a); // 10