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

Levage : face à la zone morte temporelle

DDD
DDDoriginal
2024-12-13 12:44:11630parcourir

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

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

favCoffee = 'espresso'

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

var favCoffee

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'

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

}

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

//using const
favCoffee = 'expresso'
const favCoffee
console.log(favCoffee) // uncaught ReferenceError: Cannot access 'favCoffee' before initialization

(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!

Déclaration:
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