Maison > interface Web > js tutoriel > Pourquoi « let » et « const » ne semblent-ils pas être hissés en JavaScript ?

Pourquoi « let » et « const » ne semblent-ils pas être hissés en JavaScript ?

DDD
Libérer: 2025-01-03 02:29:40
original
352 Les gens l'ont consulté

Why Do `let` and `const` Seem Not to Be Hoisted in JavaScript?

Levage des variables déclarées avec let ou const

Dans ES6, les variables déclarées avec let ou const semblent présenter un comportement de levage incohérent par rapport à var.

Le mythe du levage

Tout d'abord, il est important de clarifier que toutes les déclarations en JavaScript sont levées, y compris celles utilisant let, const, var, function, function* et class. Cela signifie que toutes ces déclarations sont visibles dans toute la portée dans laquelle elles sont définies.

La différence avec let et const

La distinction clé ne réside pas dans le levage mais dans l'initialisation des variables let et const.

  • var/function/function*: Ces déclarations sont initialisé avec undefined ou la fonction elle-même lorsque la liaison est créée en haut de la portée.
  • let/const/class: Ces déclarations restent non initialisées jusqu'à ce que l'instruction où ils sont définis est exécuté.

Cet écart temporel entre la déclaration et l'initialisation crée une idée fausse sur levage.

La zone morte temporelle

Pour les variables let et const, la période entre la déclaration et l'initialisation est connue sous le nom de zone morte temporelle. Pendant ce temps, l'accès à la variable entraîne une ReferenceError.

Exemple

x = y = "global";
(function() {
    console.log(x); // undefined
    console.log(y); // Reference error: y is not defined

    var x = "local";
    let y = "local";
}());
Copier après la connexion

Dans cet exemple, les variables var et let x et y sont déclarées en haut de la portée de la fonction. Cependant, la variable let y n'est initialisée que plus tard, créant une zone morte temporelle où l'accès à y génère une erreur.

Conclusion

Bien que toutes les déclarations en JavaScript soient levées, les variables let et const présentent un comportement d'initialisation différent. Ce comportement donne l'impression de "ne pas être hissé" mais est en fait dû à la zone morte temporelle créée par l'initialisation tardive. Les variables let et const fonctionnent de la même manière en termes de levage.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal