Passaggio per riferimento in Javascript

Nel linguaggio javascript le variabili assegnate agli oggetti non contengono i dati effettivi, ma piuttosto un riferimento all'indirizzo di memoria in cui sono registrati i dati.

    Un esempio pratico

    Ad esempio, in javascript un array contiene i riferimenti agli indirizzi di memoria dei dati e non i dati stessi.

    var myVar = new Array(0, 1, 2, 3, 4);

    Pertanto, quando copio la variabile array, sto copiando i riferimenti agli indirizzi di memoria.

    var myVar_copia = myVar;

    Se modifico un elemento della nuova variabile il nuovo valore (9) viene registrato nell'indirizzo di memoria dell'aray.

    myVar_copia[0] = 9;

    La modifica si ripercuote anche sulla variabile myVar perché punta allo stesso indirizzo di memoria.

    document.write(myVar[0]);

    Sia nell'elemento myVar_copia[0] che nell'elemento myVar[0] è memorizzato il valore 9.

    9

    Questo accade perché entrambe le variabili myVar e myVar_copia fanno riferimento allo stesso indirizzo di memoria dell'oggetto array.

    Esempio 2

    In questo esempio definisco una classe Persone.

    • function Persone(nome,cognome) {
    • this.nome = nome;
    • this.cognome = cognome;
    • this.getNome = function() {
    • return this.nome + " " + this.cognome;
    • }
    • }

    Poi creo un oggetto tramite un'istanza e lo memorizzo nella variabile p

    var p = new Persone("Andrea", "Minini");.

    Quando copio l'oggetto p nella variabile q tramite l'istruzione var q=p sto copiando i riferimenti agli indirizzi di memoria dello stesso oggetto.

    var q = p;

    Quindi, qualsiasi modifica alla variabile q si ripercuote anche sulla variabile p.

    Ad esempio, modifico il valore assegnato alla proprietà q.nome="Andrea2"

    q.nome="Andrea2";

    Il nuovo valore "Andrea2" viene memorizzato nell'indirizzo di memoria a cui puntano entrambe le variabili p e q.

    Pertanto, il nuovo valore appare sia nella proprietà q.nome che in p.nome.

    Nota. Lo stesso non accade con i dati primitivi (es. numeri, stringhe). Le variabili come stringhe e numeri vengono sempre passate per valore. In questi casi javascript memorizza il valore vero e proprio nell'indirizzo di memoria della variabile e non un riferimento a un indirizzo di memoria. Ad esempio se assegno una stringa a una variabile myVar e poi copio quest'ultima nella variabile myVar_copia, viene copiato il dato

    var myVar="ABC";
    var myVar_copia = myVar;

    Un'eventuale modifica alla variabile myVar_copia non modifica il contenuto della variabile myVar

    myVar_copia="DEF";

    Nella variabile myVar_copia viene memorizzata la stringa "DEF" mentre nella variabile myVar contiuna a essere memorizzata la stringa "ABC". Lo stesso accade per i numeri e i valori booleani.

    E così via.

     


     

    Segnalami un errore, un refuso o un suggerimento per migliorare gli appunti

    FacebookTwitterLinkedinLinkedin
    knowledge base

    Le variabili in Javascript