I lettori come te aiutano a sostenere MUO. Quando effettui un acquisto utilizzando i link sul nostro sito, potremmo guadagnare una commissione di affiliazione.

Il sollevamento è un meccanismo JavaScript che consente di accedere a variabili e funzioni prima di inizializzarle. Sollevare una simile dichiarazione la sposta effettivamente al vertice del suo campo di applicazione.

Scopri tutto su come funziona il sollevamento in JavaScript e su come gestirlo al meglio per evitare errori nel codice.

Variabili di sollevamento Con var, let e const

Il sollevamento è possibile perché JavaScript utilizza il sistema di compilazione JIT (Just-in-Time), che esegue la scansione del codice per identificare tutte le variabili nei rispettivi ambiti.

Il compilatore JIT quindi solleva tutte le istanze delle dichiarazioni di variabile nella parte superiore del loro ambito al momento della compilazione. JavaScript solleva solo dichiarazioni di variabili, non le loro inizializzazioni.

Il comportamento delle variabili, quando vengono sollevate, dipende dalla parola chiave con cui le dichiari, poiché ogni parola chiave si comporta in modo diverso.

instagram viewer

var

Accesso a una variabile non inizializzata dichiarata con l'estensione var la parola chiave restituirà non definito. Per esempio:

consolare.log (pippo); // non definito
var pippo = 2;

Il codice precedente registra non definito perché chiama console.log prima di inizializzare la variabile.

Il compilatore JavaScript visualizza il blocco di codice precedente in questo modo:

var pippo;
consolare.log (pippo); // non definito
pippo = 2;

Durante il sollevamento, le variabili obbediscono al regole dell'ambito JavaScript. Javascript solleverà solo una variabile nella parte superiore dell'ambito in cui l'hai dichiarata. Il tentativo di registrare il valore di una variabile al di fuori del suo ambito dichiarato si tradurrà in a Errore di riferimento. Ad esempio, se dichiari una variabile all'interno di una funzione, non sarà visibile al di fuori di tale ambito:

funzionemiaFunzione() {
consolare.log (pippo); // non definito
var pippo = 10;
}

miaFunzione();
consolare.log (pippo); // ReferenceError: foo non è definito

Il tentativo di accedere a una variabile al di fuori del suo ambito si tradurrà in a Errore di riferimento.

let e const

Secondo il MDN documentazione su permettere E cost sollevamento, JavaScript solleva anche le variabili dichiarate con l'estensione permettere E cost parole chiave. Tuttavia, a differenza delle variabili dichiarate con l'estensione var parola chiave, non sono inizializzati con un non definito valore.

Per esempio:

funzionemiaFunzione() {
consolare.log (pippo); // non definito
consolare.log (barra); // ReferenceError: impossibile accedere a 'bar' prima dell'inizializzazione
consolare.log (baz); // ReferenceError: Impossibile accedere a 'baz' prima dell'inizializzazione

var pippo = 5;
permettere barra = 10;
cost bazz = 15;
}

miaFunzione();

Non è possibile accedere alle variabili dichiarate con le parole chiave let e const prima di inizializzarle con un valore.

Funzioni di sollevamento

I paranchi JavaScript funzionano in modo simile alle variabili. Come per le variabili, dipende da come le dichiari. Ad esempio, JavaScript solleva le dichiarazioni di funzione in modo diverso dalle espressioni di funzione.

Una dichiarazione di funzione è una funzione dichiarata con un nome, mentre un'espressione di funzione è una funzione di cui è possibile omettere il nome. Per esempio:

funzionepippo() {
// dichiarazione di funzione
}

cost barra = () => {
// espressione di funzione
}

JavaScript solleva le dichiarazioni di funzione ma non le espressioni di funzione. Per esempio:

pippo(); // 5
sbarra(); // TypeError: bar() non è una funzione

// Dichiarazione di funzione
funzionepippo() {
consolare.tronco d'albero(5);
}

// Espressione di funzione
var barra = funzioneespressione() {
consolare.tronco d'albero(10);
};

Questo codice chiama pippo prima di dichiararlo e inizializzarlo come funzione, ma registra comunque 5 alla consolle. Tuttavia, cercando di chiamare sbarra risulta in un TipoErrore.

Gestione del sollevamento

Essere consapevoli del sollevamento e dei potenziali errori che potrebbero verificarsi se gestiti in modo errato può farti risparmiare lunghe ore di debug. Ecco alcuni modi per gestire il sollevamento.

Dichiarare le variabili all'interno delle funzioni

Dichiarare le variabili all'interno delle funzioni che vi accederanno. Non sarai sempre in grado di farlo, poiché potresti aver bisogno di una variabile globale a cui puoi accedere all'interno di più funzioni. Quindi assicurati di dichiarare le variabili a livello globale solo se è davvero necessario.

Dichiara variabili Con let o const

Dovresti sempre usare la let e Const parole chiave al posto di var parola chiave quando si dichiarano variabili. Questa pratica è utile quando si dichiarano variabili locali all'interno di una funzione. Conoscere i modi corretti per dichiarare le variabili in JavaScript riduce le possibilità di errori causati dal sollevamento che si verificano nel codice.

Dichiarare le variabili nella parte superiore del loro ambito

Dichiara tutte le tue variabili nella parte superiore dei rispettivi ambiti, prima di qualsiasi altra dichiarazione. In questo modo assicurerai che il compilatore JavaScript non debba sollevare quelle variabili per accedervi.

Utilizzo della modalità rigorosa

La modalità Strict è una modalità JavaScript che regola la scarsa sintassi, ottimizza il tempo di esecuzione del codice e proibisce l'abuso della sintassi vagamente tipizzata di JavaScript generando errori in fase di compilazione.

Ad esempio, in "modalità sciatta", a causa del sollevamento, puoi accedere a una variabile al di fuori della funzione inizializzata, anche se non è stata dichiarata:

miaFunzione();
consolare.log (pippo); // 20

funzionemiaFunzione() {
pippo = 20;
}

Nel blocco di codice sopra, JavaScript dichiara automaticamente pippo e lo solleva in cima all'ambito globale, ignorando l'ambito in cui lo hai inizializzato.

È possibile utilizzare la modalità rigorosa per correggere questo comportamento e generare un errore se si tenta di accedere alla variabile al di fuori dell'ambito della funzione.

La modalità rigorosa non interrompe del tutto il sollevamento. Al contrario, previene le forme di sollevamento più confuse e soggette a errori. È comunque importante comprendere il concetto generale e le regole alla base del sollevamento, anche quando si utilizza la rete di sicurezza in modalità rigorosa.

Per attivare la modalità rigorosa a livello globale, dichiara la sintassi all'inizio del file di script:

"utilizzorigoroso"; // O 'utilizzorigoroso'

Per attivare la modalità rigorosa a livello di funzione, dichiara la sintassi nella parte superiore del corpo di una funzione prima di qualsiasi istruzione:

funzionemyStrictFunction() {
"utilizzorigoroso";
}

Se dichiari la modalità rigorosa a livello di funzione, l'impostazione si applicherà solo alle istruzioni all'interno di quella funzione.

La dichiarazione di modalità rigorosa a livello globale impedisce l'accesso alle variabili al di fuori dei rispettivi ambiti:

"utilizzorigoroso";
miaFunzione();
consolare.log (pippo); // ReferenceError: foo non è definito

funzionemiaFunzione() {
pippo = 20;
}

Con la modalità rigorosa attivata, il compilatore JavaScript verrà sollevato miaFunzione() all'inizio del suo ambito senza la variabile non dichiarata.

Capire cosa influisce sul sollevamento

Il sollevamento è piuttosto unico per JavaScript e può essere un comportamento molto confuso per avvolgere la testa. Può influenzare variabili e funzioni, ma ci sono modi per prevenirlo se necessario.

Diversi fattori possono influenzare il sollevamento, quindi è meglio evitare qualsiasi occorrenza di sollevamento di variabili o funzioni nel codice.