Ambito di variabili e costanti

In JScript sono disponibili tre ambiti: globale, locale e di classe. Le variabili o costanti dichiarate all'esterno di una definizione di funzione o di classe sono globali e pertanto sono accessibili e modificabili nell'intero programma. Le variabili dichiarate all'interno di una definizione di funzione sono invece locali e vengono create ed eliminate a ogni esecuzione della funzione. L'accesso alle variabili locali è consentito soltanto all'interno della funzione. Le variabili dichiarate all'interno di una definizione di classe sono disponibili all'interno della classe e non sono accessibili in modo diretto dall'ambito globale. Per ulteriori informazioni vedere Oggetti basati su classi.

Descrizione

In linguaggi quali C++ è presente anche un ambito blocco, in cui ogni insieme di parentesi graffe ({}) definisce un nuovo ambito. In JScript gli ambiti blocco non sono supportati.

Il nome di una variabile locale può corrispondere a quello di una variabile globale, tuttavia le variabili rimangono completamente distinte e separate. Di conseguenza, la modifica del valore di una variabile non ha alcun effetto sul valore dell'altra variabile. All'interno della funzione in cui viene dichiarata la variabile locale, soltanto la versione locale assume significato. Questo principio è noto come visibilità.

// Define two global variables.
var name : String = "Frank";
var age : int = "34";

function georgeNameAge() {
   var name : String; // Define a local variable.
   name = "George";   // Modify the local variable.
   age = 42;          // Modify the global variable.
   print(name + " is " + age + " years old.");
}

print(name + " is " + age + " years old.");
georgeNameAge();
print(name + " is " + age + " years old.");

Esaminando l'output di questo programma si nota come una variabile locale può essere modificata senza modificare il valore della variabile globale. Le modifiche apportate alla variabile globale dall'interno di una funzione non hanno effetti sul valore nell'ambito globale.

Frank is 34 years old.
George is 42 years old.
Frank is 42 years old.

In JScript, le dichiarazioni delle variabili vengono elaborate prima dell'esecuzione del codice. Di conseguenza, non è importante se la dichiarazione si trova all'interno di un blocco condizionale o di qualche altro costrutto. Una volta trovate tutte le variabili e le costanti, viene eseguito il codice nella funzione. Pertanto il valore di una costante locale non è definito finché non viene raggiunta l'istruzione di dichiarazione della costante e una variabile locale non è definita finché non viene assegnata all'interno della funzione.

A volte ciò comporta risultati imprevisti. Si consideri il seguente programma:

var aNumber = 100;
var anotherNumber = 200;
function tweak() {
   var s = "aNumber is " + aNumber + " and ";
   s += "anotherNumber is " + anotherNumber + "\n";
   return s;
   if (false)  {
      var aNumber;                // This statement is never executed.
      aNumber = 123;              // This statement is never executed.
      const anotherNumber = 42;   // This statement is never executed.
   } // End of the conditional.
} // End of the function definition.

print(tweak());

L'output di questo programma è:

aNumber is undefined and anotherNumber is undefined

Contrariamente a quanto potrebbe prevedersi, aNumber non assume valore 100 o 123 e anotherNumber non assume valore 200 o 42: invece, sono entrambi undefined. Dal momento che aNumber e anotherNumber sono definiti nell'ambito locale, rappresentano la replica della variabile e della costante globale con lo stesso nome. Dal momento che il codice che inizializza la variabile e la costante locale non viene mai eseguito, i loro valori sono undefined.

Se si opera in modalità veloce è necessario dichiarare in modo esplicito le variabili. Quando invece la modalità veloce è disattivata, le variabili devono essere dichiarate in modo implicito. Se una variabile viene dichiarata implicitamente all'interno di una funzione, ovvero appare a sinistra in un'espressione di assegnazione ma non è stata dichiarata con la parola chiave var, è una variabile globale.

Vedere anche

Concetti

Valori undefined

Altre risorse

Variabili e costanti JScript