Sollevamento JavaScript: cosa devi sapere

Jan 08 2023
Se hai lavorato con JavaScript per un certo periodo di tempo, probabilmente hai sentito il termine "sollevamento". Infatti, per gli intervistatori, è uno dei concetti che amano chiedere perché mostra il livello di comprensione di JavaScript da parte del candidato.
Foto di Ries Bosch su Unsplash

Se hai lavorato con JavaScript per un certo periodo di tempo, probabilmente hai sentito il termine "sollevamento". Infatti, per gli intervistatori, è uno dei concetti che amano chiedere perché mostra il livello di comprensione di JavaScript da parte del candidato. Tuttavia, cosa significa esattamente sollevamento e in che modo influisce sul codice? In questo articolo, ti guiderò attraverso ciò che devi sapere su di esso e sui suoi impatti sul tuo codice.

Prima di tutto, diamo un'occhiata al significato linguistico di questo termine prima di procedere a parlare del suo uso tecnico. Il sollevamento è semplicemente usato per riferirsi all'atto di sollevare o tirare qualcosa, di solito con l'uso di funi o carrucole. Sentirai affermazioni come "si è caricata lo zaino sulla spalla", "ha issato una bandiera", "il carico è stato issato sulla nave" e così via. Altre parole per il sollevamento includono il sollevamento o l'escursionismo.

Per quanto riguarda JavaScript, "sollevamento" si riferisce al comportamento in cui l'interprete sposta automaticamente le dichiarazioni per le variabili o le funzioni all'inizio dell'ambito che le contiene prima della loro esecuzione. Ciò significa che prima che una variabile o una funzione venga dichiarata nel codice, è ancora possibile utilizzarla.

Ad esempio, considera il seguente codice:

La riga var x = 10 contiene due azioni:

  1. Dichiarazione di variabile “var”.
  2. Assegnazione variabile “=”.

È interessante notare che il sollevamento riguarda solo le dichiarazioni, non le assegnazioni o le inizializzazioni. Nell'esempio precedente, il valore di x non è definito quando è registrato nella console perché l'assegnazione a 10 non è ancora avvenuta.

Registrazione della variabile x prima della sua inizializzazione

Per capirlo meglio, diamo un'occhiata a come questo comportamento viene esibito dalle funzioni.

Nell'esempio sopra, osserverai che anche quando la funzione è stata chiamata prima di essere dichiarata, il codice ha funzionato ancora bene e ci ha fornito l'espressione corretta quando è stato registrato. Indipendentemente dal fatto che la funzione venga dichiarata prima della chiamata o viceversa, il comportamento rimane lo stesso. L'interprete JavaScript ha afferrato la dichiarazione della funzione e l'ha posizionata nella parte superiore dell'ambito prima della sua esecuzione. È come se il codice fosse così:

Consideriamo invece come funziona il sollevamento con una funzione anonima o assegnata a una variabile. Un esempio di ciò mostrato nell'esempio seguente:

Assegnazione di una funzione a una variabile

Come puoi vedere, il codice sopra ha prodotto un errore. Il sollevamento non supporta l'assegnazione, che è la spiegazione menzionata in precedenza del motivo per cui è così. Un'espressione nota come "espressioni di funzioni immediatamente invocate" è un approccio innovativo per eseguire una funzione anonima (IIFE in breve).

Altrettanto importanti per il comportamento dell'hosting nelle variabili JavaScript sono le due parole chiave "let" e "const", utilizzate anche per la dichiarazione di variabili come "var". A differenza delle loro controparti "var", il valore di una variabile dichiarata con "let" o "const" non viene sollevato. Se provi ad accedere al valore di uno di essi prima che venga dichiarato, otterrai un'eccezione ReferenceError come mostrato nelle immagini seguenti.

Come si comporta il sollevamento con "let"
Come si comporta il sollevamento con "const"

Quando si utilizza il sollevamento, un errore comune commesso da molti sviluppatori è presumere che il valore di una variabile sia sempre inizializzato su undefined. Questo è vero solo per le variabili che hanno la parola chiave "var" nella loro dichiarazione, però. Qualsiasi tentativo di accedere a una variabile che è stata dichiarata con "let" o "const" prima che l'assegnazione abbia avuto luogo risulterà in un ReferenceError. Le moderne best practice di codifica consigliano vivamente di evitare l'uso di "var" a favore di "let" e "const" perché offrono una migliore protezione contro modifiche involontarie o accidentali alle variabili.

In conclusione, il sollevamento è un concetto importante in JavaScript che può avere un grande impatto sul codice. Assicurati di tenerlo a mente mentre scrivi ed esegui il debug dei tuoi programmi per evitare qualsiasi ambiguità o comportamento imprevisto che porta. In genere è buona norma dichiarare tutte le variabili nella parte superiore dell'ambito. Ciò non solo renderà il tuo codice più facile da capire, ma anche semplice da mantenere.