Maison > interface Web > js tutoriel > le corps du texte

Qu'est-ce que la promotion variable en js ? Pourquoi y a-t-il une promotion variable ?

青灯夜游
Libérer: 2021-08-16 09:51:25
avant
7509 Les gens l'ont consulté

Qu'est-ce que le levage variable en JavaScript ? Cet article vous guidera à travers la promotion variable dans js et vous expliquera pourquoi il existe une promotion variable.

Qu'est-ce que la promotion variable en js ? Pourquoi y a-t-il une promotion variable ?

promotion des variables js

JavaScript est un langage monothread, l'exécution doit donc être effectuée dans l'ordre. Mais il n'est pas analysé et exécuté ligne par ligne, mais analysé et exécuté morceau par morceau. La phase de compilation sera effectuée en premier, puis la phase d'exécution. Lors de la phase de compilation, quelques millisecondes avant l'exécution effective du code, toutes les déclarations de variables et de fonctions sont détectées et ajoutées en mémoire au sein d'une structure de données JavaScript appelée Environnement Lexical. Ces variables et fonctions peuvent donc être utilisées avant d’être réellement déclarées.

Commençons par un exemple simple :

 a = 2;
 var a;
 console.log(a);
Copier après la connexion

Que produira le code ci-dessus ? Si ce code est exécuté de haut en bas, il produira certainement un résultat indéfini. Cependant, JavaScript n'est pas un langage d'exécution descendant. La sortie de ce code est 2, est-ce inattendu ? Alors, pourquoi cela se produit-il ? Le point clé réside dans la Promotion variable. Cela augmentera les déclarations de toutes les variables de la portée actuelle en haut du programme. Par conséquent, le code ci-dessus est équivalent au code suivant. Cela rend-il plus clair ?

 var a;
 a = 2;
 console.log(a);
Copier après la connexion

Regardons donc un autre exemple :

 console.log(a);
 var a = 2;
Copier après la connexion

Que va produire ce code ? Sortie 2 ? En fait, ce code affichera un résultat indéfini. Pourquoi est-ce ? Comme je viens de le dire, JavaScript favorisera la déclaration des variables vers le haut, mais l'instruction d'affectation ne sera pas promue. Pour js, var a = 2 est divisé en analyse en deux étapes :

var a;
a = 2;
Copier après la connexion

et js ne le seront que. promu var a, donc la déclaration à l'instant équivaut à :

 var a;
 console.log(a);
 a = 2;
Copier après la connexion

Alors, pourquoi y a-t-il une promotion variable ?

Pourquoi le phénomène de promotion variable se produit-il ? Car js, comme les autres langages, doit passer par les étapes de compilation et d’exécution. Lorsque js est en phase de compilation, il collectera toutes les déclarations de variables et déclarera les variables à l'avance, et les autres instructions ne changeront pas leur ordre. Par conséquent, pendant la phase de compilation, la première étape a été exécutée et la seconde partie est exécutée. uniquement lorsque l'instruction est exécutée dans la phase d'exécution.

Déclaration de variable

Les déclarations de variables JS peuvent être grossièrement divisées en trois types : les déclarations var, les déclarations let et const et les déclarations de fonction. Lorsque des déclarations de fonctions apparaissent avec d'autres déclarations, certains conflits peuvent survenir. Jetons un coup d'oeil ci-dessous :

 fn();
 function fn () {
     console.log('fn');
 }
 var fn = 2;
Copier après la connexion

Que pensez-vous que cela va produire ? Est-ce que j'obtiendrai une erreur si j'écris ceci ? En fait, le résultat de sortie est fn. Ceci explique la question que nous venons de poser, lorsqu'une déclaration de fonction apparaît avec d'autres déclarations, qui a la priorité ? La réponse est : La déclaration de fonction est avant tout, après tout, les fonctions sont l'aristocratie de js.

Que faire avec autant de déclarations de fonctions ?

 fn();
 function fn () {
     console.log('1');
 }
 function fn () {
     console.log('2');
 }
Copier après la connexion

Le résultat de sortie du code ci-dessus est 2. En effet, lorsqu'il y a plusieurs déclarations de fonction dans , la dernière déclaration de fonction remplace la précédente .

Il y a un dernier exemple :

 fn();
 var fn = function () {
 console.log('fn');
 }
Copier après la connexion

Après la compréhension ci-dessus, est-ce très simple ? C'est le même que le deuxième exemple. Ce format de var fn = function() {} est appelé une expression de fonction. Il est en fait divisé en deux parties :

var fn;
fn = function() {};
Copier après la connexion

En nous référant à l'exemple 2, nous pouvons savoir que le résultat de ceci devrait être une erreur (car fn est déclaré mais non attribué, donc fn n'est pas défini).

Résumé

Alors, résumons.

  • js élèvera la déclaration de variable au sommet de js pour l'exécution. Pour des instructions comme var a = 2, elle sera divisée et l'étape var a sera promue.

  • L'essence de la promotion des variables est en fait que le moteur js déclare toutes les variables lors de la compilation, donc lors de l'exécution, toutes les variables ont été déclarées.

  • Lorsqu'il existe plusieurs variables portant le même nom, la déclaration de fonction écrasera les autres déclarations. S'il existe plusieurs déclarations de fonction, la dernière déclaration de fonction remplace toutes les déclarations précédentes.

Pour plus de connaissances liées à la programmation, veuillez visiter : Introduction à la programmation ! !

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!

Étiquettes associées:
source:juejin.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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!