domenica, novembre 16, 2014

Scope delle variabili e non intendo le ramazze

Non amo i neologismi esteri, quando posso preferisco usare la nostra bella lingua, ma come si fa a tradurre il termini scope?

Non sono le ramazze, ma ogni buon informatico ne capisce il significato: lo scope di una variabile definisce l'ambito di validità della variabile stessa.

In java lo scope è definito da un qualsiasi blocco di istruzioni delimitato dalla coppia di parentesi graffe.

In javascript lo scope è, o globale, o definito a livello di funzione.

Le variabili globali sono nuove proprietà dell'oggetto window e sono accessibili da qualsiasi funzione definita a qualunque livello.

Le varibili definite a livello di funzione, sono locali alla funzione stessa e non sono accessibili da altre funzioni, se non dalle funzioni interne per creare il meccanismo di closure visto nel
post precedente.

In javascript non esiste  il concetto di scope di blocco, anche se dichiariamo una variabile all'interno di un blocco delimitato dalle parentesi graffe, è come se spostassimo la dichiarazione all'inizio della prima funzione in cui la variabile è dichiarata:

 var global = 5;  
   
 var miaFunzione = function() {  
        
      b = 100;  
   
      if (global == 5) {  
             
           var local = 10;  
        
      }  
        
      console.log(local);       
 };  
 
 miaFunzione();  
 console.log(b);  

global è una variabile globale, puo' essere acceduta da miaFunzione.

La variabile b è dichiarata senza la parola chiave var, purtroppo lo si puo' fare con lo sgradevole effetto di rendere b globale, è ovviamente sconsigliato di scrivere codice del genere.

Local, nonostante dichiarata a livello del blocco if, subito dopo la dichiarazione è come se fosse spostata all'inizio della funzione: l'istruzione di scrittura sulla console fuori dal blocco stampa il valore 10, tale meccanismo si chiama hoisting.

L'ultima istruzione stampa il valore 100, la variabile b è in effetti, una variabile globale solo perchè non si è utilizzata la parola chiave var: usatela!

Ok, adesso sappiamo tutto sulle scope, usatele bene :))
Alla prox.
Ivan



Nessun commento:

Posta un commento