Sollevamento Javascript e dichiarazione di ambito globale
In javascript, la fase di compilazione trova e associa tutte le dichiarazioni ai loro ambiti appropriati.
CASO 1
a = 2;
console.log(a);
Se non viene utilizzato in modalità rigorosa, si presume che lo snippet venga effettivamente elaborato come:
var a;
a = 2;
console.log(a);
Uscita: 2
CASO2
se la dichiarazione avviene sotto console.log ()
console.log(a);
var a = 2;
Qui alla riga 1: il compilatore verificherà la dichiarazione di a nel suo ambito se non viene trovato, l'ambito globale ne assegnerà uno e lo stesso codice verrà assunto nuovamente come
var a;
console.log(a);
a = 2;
Output: undefined // poiché nessun valore viene assegnato durante la lettura dell'interprete da console
CASO 3
console.log(a);
a = 2;
Uscita: RefErr
Perché questo genera un errore di riferimento e non è indefinito?
Risposte
Se guardi attentamente i tuoi primi due casi, dichiari sempre la variabile a
e in JavaScript vengono sollevate solo le dichiarazioni.
Detto questo, nel tuo Case 3
, la variabile a
non viene mai dichiarata, quindi il sollevamento non è possibile qui. Con questo, v'è variabile dal nome a
del perimetro, e quindi, ReferenceError
.
Se guardi la descrizione di ReferenceError , si legge:
L'oggetto ReferenceError rappresenta un errore quando si fa riferimento a una variabile inesistente.
Le variabili globali implicite non implicano var
un'istruzione. Non vi è alcun sollevamento di loro.