Il passaggio dei parametri nelle funzioni JavaScript

Il passaggio di parametri in JavaScript è molto simile ad altri linguaggi di programmazione ed avviene sia per valore che per riferimento

In JavaScript in una funzione gli non oggetti vengono mai passati per riferimento, così come per le variabili il passaggio avviene per valore. Vediamo qualche un esempio:

    var myObject = {
        myField: 1
    };
    var myFunction = function(myParam) {
        myParam.myField = 4;
        console.log(myParam.myField); // => 4
    };
    myFunction(myObject);
    console.log(myObject.myField); // => 4


Nell’esempio myObject rappresenta un oggetto con un campo myField che vale 1, mentre myFunction è una funzione in cui viene cambiato il valore myField con 4. Dopo aver eseguito la funzione è possibile notare come nella funzione il valore myField cambia e diventa 4, usciti dalla funzione anche il valore all’esterno è stato cambiato con 4. Questo comportamento non è dovuto al fatto che myParam nella funzione viene passatto come riferimento, ma la variabile myParam viene passata per valore, ma al suo interno abbiamo il riferimento della variabile, quindi qualsiasi modifica effettuata verrà applicata all’oggetto a cui si fa riferimento.

Il passaggio delle variabili ad una funzione avviene sempre per valore, ad esempio riprendendo l’esempio precedente:

    var myObject = {
        myField: 1
    };
    var myFunction = function(myParam) {
        myParam.myField = 4;
        myParam = null;
    };
    myFunction(myObject);
    console.log(myObject.myField); // => 4


Pur assegnando null all’interno di myFunction alla variabile myParam, quest’ultima essendo passata per valore non influenza il riferimento alla variabile esterna myObject. Vediamo un altro esempio di codice JavaScript:

    var myVar = 1; 

    var myFunction = function(myParam) {
        myParam = 2;
    };

    myFunction(myVar);
    console.log(myVar); // => 1


Pur modificando il valore myParam all’interno della funzione, la modifica non altera il valore esterno alla funzione di myVar in quanto il passaggio di parametri è stato effettuato per valore.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *