Il sollevamento o “hoisting” in JavaScript è un comportamento specifico del linguaggio, dove le dichiarazioni di variabili (usando var) o dichiarazioni di funzioni (function declaration) vengono spostate, o “sollevate”, al top del loro scope attuale durante l’esecuzione del codice.
Questo significa che è possibile utilizzare una variabile o una funzione prima della sua dichiarazione nel codice, poiché l’interprete JavaScript “solleva” le dichiarazioni all’inizio dello scope corrente.
Tuttavia, è importante notare che solo le dichiarazioni vengono sollevate, non le inizializzazioni. Quindi se si inizializza una variabile durante la sua dichiarazione, il valore inizializzato non sarà disponibile prima della dichiarazione.
Ecco un esempio per rendere più chiaro il concetto:
```
console.log(myVar); //undefined
var myVar = 5;
console.log(myVar); //5
```
Nonostante la variabile `myVar` sia stata dichiarata dopo il primo `console.log`, il codice non produce un errore perché la dichiarazione di `myVar` viene “sollevata” all’inizio dello scope. Tuttavia, il valore 5 non è disponibile prima della sua inizializzazione, quindi il primo `console.log` stampa `undefined`.
L’uso di `let` e `const` per dichiarare variabili e l’expression di funzioni (`function expression`) non rispettano le regole del “hoisting”.