Il suggerimento rapido del video di oggi viene fornito in risposta a una domanda su Twitter, riguardante JavaScript "sollevamento". Che cos'è? Come funziona? Che cosa hai bisogno di sapere al riguardo? Tutto questo sarà trattato in questa lezione sui fondamentali focalizzata sui principianti.
Considera il seguente codice:
var myvar = 'my value'; alert (myvar); // il mio valore
Ok, ovviamente l'avviso mostrerà "il mio valore". È ovvio; comunque, resta con me. Creiamo quindi una funzione immediata, che avverte lo stesso valore.
var myvar = 'my value'; (function () alert (myvar); // my value) ();
Tutto bene tutto bene. Ancora ovvio, lo so. Ora, lanciamo una chiave nel mix e creiamo una variabile locale all'interno di questa funzione anonima con lo stesso nome.
var myvar = 'my value'; (function () alert (myvar); // undefined var myvar = 'valore locale';) ();
Eh? Perché ora viene visualizzato l'avviso non definito
? Anche se lo abbiamo dichiarato una nuova variabile, è ancora sotto l'avviso; quindi non dovrebbe avere un effetto, giusto? Sbagliato.
Nel suo ambito attuale, indipendentemente da dove viene dichiarata una variabile, sarà, dietro le quinte, issato in alto. Tuttavia, solo il dichiarazione
sarà issato. Se anche la variabile è inizializzato
, il valore corrente, nella parte superiore dell'ambito, verrà inizialmente impostato su non definito
.
Ok, decifriamo la differenza tra i termini, dichiarazione
e inizializzazione
. Assumi la seguente riga: var joe = 'plumber';
var joe; // la dichiarazione
joe = 'idraulico'; // l'inizializzazione
Ora che comprendiamo la terminologia, possiamo capire più facilmente cosa sta succedendo sotto il cofano. Si consideri la seguente funzione fasulla.
(function () var a = 'a'; // linee di codice var b = 'b'; // più righe di codice var c = 'c'; // antipattern // righe finali di scripting) () ;
Dichiara tutte le variabili in alto.
Si noti che ciò che è esemplificato sopra è considerato una cattiva pratica. Tuttavia, dietro le quinte, tutte quelle dichiarazioni variabili - indipendentemente da dove si verificano nell'ambito della funzione - saranno issate in alto, in questo modo:
(function () var a, b, c; // variabili dichiarate a = 'a'; // linee di codice b = 'b'; // inizializzate // più righe di codice c = 'c'; // inizializzato // righe finali di scripting) ();
Se ora torniamo alla confusione originale non definito
pezzo di codice, dall'alto:
var myvar = 'my value'; (function () alert (myvar); // undefined var myvar = 'valore locale';) ();
Ora dovrebbe avere perfettamente senso perché myvar
sta avvisando non definito.
Come abbiamo appreso, non appena la variabile locale, myvar
, è stato dichiarato, è stato automaticamente issato in cima all'ambito della funzione ... sopra l'avviso. Di conseguenza, la variabile era già stata dichiarata al momento dell'avviso; tuttavia, poiché le inizializzazioni non vengono sollevate, il valore della variabile è: non definito
.