Ambito si riferisce alla disponibilità di variabili e funzioni in alcune parti del codice.
In JavaScript, una variabile ha due tipi di ambito:
- Ambito globale
- Ambito locale
Ambito globale
Una variabile dichiarata all’inizio di un programma o all’esterno di una funzione è considerata una variabile di ambito globale.
Vediamo un esempio di una variabile di ambito globale.
// program to print a text let a = "hello";function greet () { console.log(a);}greet(); // hello
Nel programma precedente, la variabile a è dichiarata nella parte superiore di un programma ed è una variabile globale. Significa che la variabile a
può essere utilizzata ovunque nel programma.
Il valore di una variabile globale può essere modificato all’interno di una funzione. Ad esempio,
// program to show the change in global variablelet a = "hello";function greet() { a = 3;}// before the function callconsole.log(a);//after the function callgreet();console.log(a); // 3
Nel programma precedente, la variabile a è una variabile globale. Il valore di a è ciao. Quindi si accede alla variabile a all’interno di una funzione e il valore cambia in 3.
Quindi, il valore di a cambia dopo averlo modificato all’interno della funzione.
Nota: È buona norma evitare l’uso di variabili globali perché il valore di una variabile globale può cambiare in diverse aree del programma. Può introdurre risultati sconosciuti nel programma.
In JavaScript, una variabile può essere utilizzata anche senza dichiararla. Se una variabile viene utilizzata senza dichiararla, tale variabile diventa automaticamente una variabile globale.
Ad esempio,
function greet() { a = "hello"}greet();console.log(a); // hello
Nel programma precedente, la variabile a è una variabile globale.
Se la variabile è stata dichiarata utilizzandolet a = "hello"
, il programma genererebbe un errore.
Nota: In JavaScript, c’è "strict mode";
in cui una variabile non può essere utilizzata senza dichiararla. Per ulteriori informazioni su strict, visita JavaScript Strict.
Ambito locale
Una variabile può anche avere un ambito locale, cioè può essere accessibile solo all’interno di una funzione.
Esempio 1: Variabile di ambito locale
// program showing local scope of a variablelet a = "hello";function greet() { let b = "World" console.log(a + b);}greet();console.log(a + b); // error
Output
helloWorldUncaught ReferenceError: b is not defined
Nel programma precedente, la variabile a è una variabile globale e la variabile b è una variabile locale. La variabile b è accessibile solo all’interno della funzione greet. Quindi, quando proviamo ad accedere alla variabile b al di fuori della funzione, si verifica un errore.
let è con ambito di blocco
La parola chiavelet
è con ambito di blocco (la variabile è accessibile solo nel blocco immediato).
Esempio 2: variabile con ambito di blocco
// program showing block-scoped concept// global variablelet a = 'Hello';function greet() { // local variable let b = 'World'; console.log(a + ' ' + b); if (b == 'World') { // block-scoped variable let c = 'hello'; console.log(a + ' ' + b + ' ' + c); } // variable x cannot be accessed here console.log(a + ' ' + b + ' ' + c);}greet();
Output
Hello WorldHello World helloUncaught ReferenceError: x is not defined
Nel programma precedente, la variabile
- a è una variabile globale. Si può accedere in qualsiasi punto del programma.
- b è una variabile locale. È possibile accedervi solo all’interno della funzione
greet
. - c è una variabile con ambito di blocco. È possibile accedervi solo all’interno del blocco di istruzioni
if
.
Quindi, nel programma sopra, i primi dueconsole.log()
funzionano senza alcun problema.
Tuttavia, stiamo cercando di accedere alla variabile c con ambito di blocco al di fuori del blocco nel terzoconsole.log()
. Questo genererà un errore.
Nota: in JavaScript, var
è con ambito di funzione e let
è con ambito di blocco. Se si tenta di utilizzare var c = 'hello';
all’interno dell’istruzione if
nel programma precedente, l’intero programma funziona, poiché c viene trattato come una variabile locale.
Per ulteriori informazioni su let
versus var
, visitare JavaScript let vs var.