Conoscere javascript: var

var x = 10;
y = 2;

Si può usare javascript per molto tempo senza domandarsi quale sia la differenza tra dichiarare una variabile usando var e dichiararla senza; in base allo stile di programmazione può essere molto raro, oppure molto frequente, che questo porti a dei problemi.
Nel dubbio è sempre meglio dichiarare le variabili usando var, ma qual’è la differenza?

Usando var la variabile è locale, ha lo stesso scope della dichiarazione; quindi è visibile e modificabile da tutte le funzioni annidate ma non lo è dall’ambiente esterno che in alcun modo va a modificare. Appena si esce dallo scope viene distrutta.

Se invece non si usa var ci sono due possibilità:

  • Si risale nella catena di scoping statico e se si incontra una variabile con tale nome se ne modifica il valore; che è il comportamento che ci si aspetta: se c’è una variabile visibile viene modificata.
  • Se si risale la catena fino all’ambiente globale senza trovare una variabile già dichiarata allora si dichiara una variabile globale con quel nome. E questo è molto pericoloso, può portare a comportamenti indesiderati.

Chiaramente è più a rischio chi tende ad usare sempre gli stessi nomi di variabili, ad esempio il classico indice i per i contatori.

function foo(){
   for(i=0; i < 5; i++)console.log('Foo:'+i);
}

for(i = 0; i < 3; i++)
{
  foo();
  console.log('Main for:'+i);
}
Output atteso Output effettivo
Foo:0
Foo:1
Foo:2
Foo:3
Foo:4
Main for:0
Foo:0
Foo:1
Foo:2
Foo:3
Foo:4
Main for:1
Foo:0
Foo:1
Foo:2
Foo:3
Foo:4
Main for:2
Foo:0
Foo:1
Foo:2
Foo:3
Foo:4
Main for:5

Con gli esempi può sembrare tutto molto semplice, errori stupidi, ma in progetti più grossi di una pagina in cui non si ha tutto il codice sott’occhio è molto facile fare casini. Sopratutto perché quando si scrive tanto codice si tende a ridurre al minimo i caratteri da digitare, viene naturale non scrivere var e chiamare le variabili tutte con nomi corti che alla lunga tendono a ripetersi.

Nota: A livello globale non fa differenza ma per prendere l’abitudine è bene usare comunque var.

Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedIn

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *