Sobes.tech
Junior

Come funziona il trasferimento di dati per riferimento e per valore?

sobes.tech AI

Risposta dell'AI

Il trasferimento di dati per valore (by value) e per riferimento (by reference) determina come cambia la variabile originale quando viene passata a una funzione o assegnata.

Trasferimento per valore:

Viene creata una copia del valore della variabile. Qualsiasi modifica a questa copia all'interno della funzione o durante l'assegnazione non influisce sulla variabile originale. È adatto per tipi di dati primitivi (numeri, stringhe, valori booleani, null, undefined, Symbol, BigInt).

// Trasferimento per valore
let a = 10;

function modifyValue(num) {
  num = 20; // La copia viene modificata
}

modifyValue(a);
console.log(a); // Mostrerà 10 - il valore originale non è cambiato

Trasferimento per riferimento:

Non viene passato il valore stesso, ma un riferimento (indirizzo in memoria) a quel valore. Le modifiche fatte tramite questo riferimento influenzano la variabile originale. In JavaScript, questo si applica agli oggetti (inclusi array e funzioni). È importante capire che non si passa l'oggetto in sé, ma un riferimento ad esso. Quando un parametro viene riassegnato all'interno di una funzione, il riferimento riceve un nuovo valore, ma la variabile originale non cambia.

// Trasferimento per riferimento (per oggetti)
let obj1 = { value: 10 };

function modifyObject(obj) {
  obj.value = 20; // La proprietà dell'oggetto viene modificata per riferimento
}

modifyObject(obj1);
console.log(obj1.value); // Mostrerà 20 - l'oggetto originale è cambiato
// Esempio di riassegnazione del parametro durante il passaggio di un oggetto
let obj2 = { value: 10 };

function reassignObject(obj) {
  obj = { value: 30 }; // obj ora si riferisce a un nuovo oggetto nel scope locale della funzione
}

reassignObject(obj2);
console.log(obj2.value); // Mostrerà 10 - l'oggetto originale non è cambiato
Caratteristica Trasferimento per valore Trasferimento per riferimento
Cosa viene passato Copia del valore Riferimento al valore
Impatto sull'originale No Sì (quando si modificano le proprietà)
Tipi di dati in JS Primitivi Oggetti