Maison > interface Web > js tutoriel > Levage : face à la zone morte temporelle

Levage : face à la zone morte temporelle

DDD
Libérer: 2024-12-13 12:44:11
original
684 Les gens l'ont consulté

Hoisting: facing Temporal dead zone

Alors, peut-être pensez-vous aux différences fondamentales entre var vs let et const : "const est uniquement pour la lecture, let est mutable et var est les deux " et que la seule différence est que ES6 a introduit const et let, et var est une syntaxe old-school.
Eh bien, pas du tout.


Analyser quelques exemples

1.- Ici, il est évident que nous ne pouvons pas appeler let valeur avant de la déclarer

favCoffee = 'espresso'

function showFavoriteCoffe() {
  console.log(favCoffee)
}

showFavoriteCoffe() // Cannot access 'favCoffee' before initialization

let favCoffee
Copier après la connexion

2.- Cela pourrait changer si nous utilisons var à la place de let:

favCoffee = 'espresso'

function showFavoriteCoffe() {
  console.log(favCoffee)
}
showFavoriteCoffe() //espresso

var favCoffee

Copier après la connexion

Oui, peut-être que cela ressemble à un pouvoir supplémentaire de var utilisé.
C'est ce qu'on appelle le Hoisting un processus qui vous permet d'utiliser des variables avant qu'elles ne soient déclarées.

3.- Considérons cet autre exemple :

console.log(favCoffee) // undefined
var favCoffee = 'americano'
Copier après la connexion

Bien que, dans cet exemple, var soit aussi levage ici nous sommes confrontés au TDZ.


Zone morte temporelle

Il est défini comme l'état dans lequel les variables sont inaccessibles, même si elles sont dans la portée, elles n'ont pas été déclarées.

{
/* TDZ starts
.
.
. */
var favCoffee = 'expresso' // TDZ ends
console.log(favCoffee) // expresso

}
Copier après la connexion

Merci ES6*

Donc, dans le processus de levage en raison du TDZ, par défaut, JS renvoie la valeur var initialisée comme indéfinie, mais avec let ou const il renvoie une erreur précisant que les variables n'ont pas été déclarées. Ceci est donc très utile pour détecter les erreurs et vous oblige à éviter d'utiliser des variables avant qu'elles ne soient déclarées

//using var
favCoffee = 'expresso'
var favCoffee
console.log(favCoffee) // undefined

Copier après la connexion
//using const
favCoffee = 'expresso'
const favCoffee
console.log(favCoffee) // uncaught ReferenceError: Cannot access 'favCoffee' before initialization

Copier après la connexion

(et c'est pourquoi il est important d'envisager d'utiliser une règle de journaliste comme ESLint pour éviter certaines erreurs lors du codage).


Conclusion

Le levage est toujours là, il est donc important d'utiliser let et const autant que possible, cela évite les erreurs non définies et vous permet de les détecter plus rapidement.


** ES6

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:dev.to
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