Qu'est-ce que le levage en JavaScript?

Une brève explication de ce que signifie le levage dans le langage de programmation JavaScript

JavaScript avant d'exécuter votre code l'analyse, ajoute à sa propre mémoire toutes les déclarations de fonctions et de variables qu'il trouve, et les garde en mémoire. C'est appelélevage.

Nous avons des comportements différents pour les déclarations de fonction et les expressions de fonction.

Avec les déclarations de fonction, nous pouvons appeler une fonction avant qu'elle ne soit définie, et notre code fonctionnera. Dans les autres cas, nous aurons des erreurs.

Une règle générale est de toujours définir les fonctions, les variables, les objets et les classes avant de les utiliser, pour éviter les surprises.

Supposons que nous ayons une fonction:

function bark() {
  alert('wof!')
}

En raison du levage, nous pouvons techniquement invoquerbark()avant qu'il ne soit déclaré:

bark()
function bark() {
  alert('wof!')
}

Avec les fonctions, cela ne se produit que pourdéclarations de fonction. Comme dans le cas ci-dessus.

Pas avec les expressions de fonction.

Ceci est une expression de fonction:

bark()
var bark = function() {
  alert('wof!')
}

Dans ce cas, levarla déclaration est levée et initialisée avecundefineden tant que valeur, quelque chose comme ceci:

var bark = undefined
bark()
bark = function() {
  alert('wof!')
}

L'exécution de ce code vous donnera unTypeError: bark is not a functionErreur.

constetletles déclarations sont également levées, mais elles ne sont pas initialisées à undefined commevar.

const bark = function() {
  alert('wof!')
}

ou

let bark = function bark() {
  alert('wof!')
}

Dans ce cas, si vous invoquezbark()avant de le déclarer, il vous donnera unReferenceError: Cannot access 'bark' before initializationErreur.

La même chose se produira pour toute autre expression qui affecte un objet ou une classe à une variable

Les déclarations de classe fonctionnent commeletetconstdéclarations: elles sont hissées, mais non initialisées, et l'utilisation d'une classe avant sa déclaration donnera unReferenceError: <Class> is not definedErreur.

Téléchargez mon gratuitManuel du débutant JavaScript


Plus de tutoriels js: