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.
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);
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);
Regardons donc un autre exemple :
console.log(a); var a = 2;
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;
et js ne le seront que. promu var a, donc la déclaration à l'instant équivaut à :
var a; console.log(a); a = 2;
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.
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;
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'); }
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'); }
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() {};
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).
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!