Sobes.tech
Junior

Come capisci cosa è il passaggio per riferimento?

sobes.tech AI

Risposta dell'AI

In JavaScript, i tipi di dati primitivi (stringhe, numeri, valori booleani, null, undefined, Symbol, BigInt) vengono passati per valore. Ciò significa che, quando si assegna o si passa a una funzione, viene copiata la valore stesso.

Gli oggetti (inclusi array e funzioni) vengono passati e copiati per riferimento. In realtà, non viene copiato l'oggetto stesso, ma il riferimento all'area di memoria in cui esso si trova.

// Passaggio per valore
let a = 10;
let b = a; // Copia il valore 10
b = 20;
console.log(a); // 10, modificare 'b' non influisce su 'a'

// Passaggio per riferimento
let obj1 = { value: 10 };
let obj2 = obj1; // Copia il riferimento all'oggetto
obj2.value = 20;
console.log(obj1.value); // 20, modifiche tramite 'obj2' influenzano 'obj1' poiché puntano allo stesso oggetto

Quando si passa un oggetto a una funzione, la funzione riceve una copia del riferimento. Modificare le proprietà dell'oggetto all'interno della funzione influenzerà l'oggetto originale, perché il riferimento è lo stesso. Tuttavia, se all'interno della funzione si assegna un nuovo oggetto alla variabile, l'oggetto originale rimarrà invariato, poiché il riferimento punterà a un'altra area di memoria.

function modifyObject(obj) {
  obj.newValue = 30; // Modifica l'oggetto originale
}

function assignNewObject(obj) {
  obj = { anotherValue: 40 }; // La variabile 'obj' all'interno della funzione ora punta a un nuovo oggetto
}

let myObject = { initialValue: 10 };
modifyObject(myObject);
console.log(myObject); // { initialValue: 10, newValue: 30 }

let anotherObject = { initialValue: 10 };
assignNewObject(anotherObject);
console.log(anotherObject); // { initialValue: 10 }, l'oggetto originale non è cambiato