Le levage fait référence au processus en JavaScript où les déclarations sont faites avant l'exécution. Les déclarations de variables et de fonctions sont traitées en premier. Par conséquent, même si une variable est référencée avant sa déclaration, elle ne provoquera pas d’erreur, mais renverra plutôt undéfini. Pour les déclarations de fonction, la fonction entière est hissée, ce qui signifie qu'elle peut être utilisée avant d'être définie dans le code. Ce processus place les déclarations dans la pile avant le début de l'exécution.
Les variables déclarées avec var sont initialisées comme non définies lors du levage.
Les déclarations de fonctions sont entièrement hissées et peuvent être appelées avant d'être écrites dans le code.
Le processus de levage garantit que ces déclarations sont reconnues dans la pile d'exécution, quelle que soit leur position dans le code.
Il est important de noter que seules les déclarations sont levées, pas les affectations. Les devoirs restent au même endroit où vous les avez rédigés.
Remarque : Ceux qui disent que lors du levage, le code se déplace vers le haut se trompent en réalité. Le code ne monte jamais.
console.log(myVariable); // undefined var myVariable = 10;
Ce code effectue deux actions simultanément. Tout d'abord, il déclare la variable myVariable et la hisse dans la portée, mais sa valeur n'est toujours pas définie. Par conséquent, la commande console.log affiche la valeur non initialisée comme étant indéfinie. Après cela, la valeur 10 est attribuée à myVariable.
Cependant, si vous essayez de le modifier, cela n'aura aucun effet sur la déclaration précédente. Par exemple:
console.log(myVariable); // ReferenceError: myVariable is not defined myVariable = 10;
Ici, nous n'avons pas déclaré la variable myVariable, elle renvoie donc une ReferenceError avant de tenter de la modifier.
En résumé, JavaScript lit d'abord tout le code, puis lève toutes les déclarations tout en conservant les affectations dans leurs positions d'origine. Ce processus est connu sous le nom de levage.
Var et let sont tous deux hissés en JavaScript, mais leur comportement est légèrement différent.
Lorsque vous déclarez une variable à l'aide de var, sa déclaration est hissée hors de la portée et vous pouvez accéder à la variable avant sa déclaration, mais sa valeur sera indéfinie jusqu'à ce qu'une valeur lui soit attribuée.
console.log(myVariable); // undefined var myVariable = 10;
Dans le code ci-dessus, la déclaration var myVariable est hissée hors de la portée, mais l'affectation myVariable = 10 est laissée en place. Par conséquent, l'instruction console.log génère un résultat indéfini car la variable existe mais n'a pas encore reçu de valeur.
D'un autre côté, lorsque vous déclarez une variable en utilisant let, le comportement de levage est un peu différent. La déclaration de variable est levée, mais vous ne pouvez pas accéder à la variable avant sa déclaration. C'est ce qu'on appelle la « zone morte temporelle ». Si vous essayez d'accéder à une variable let avant sa déclaration, vous obtiendrez une ReferenceError.
console.log(myVariable); // ReferenceError: myVariable is not defined let myVariable = 10;
Dans ce cas, la déclaration est levée, mais la variable n'est pas accessible avant sa déclaration. Par conséquent, l'instruction console.log renvoie une ReferenceError car la variable n'a pas encore été définie.
Ici fondamentalement dans le cas de let, même si elle est levée, la valeur de la variable reste indéfinie. Parce qu'il n'y a pas d'espace en mémoire pour cette variable. Pour cette raison, je ne peux pas faire référence à cette adresse. Comme il n'y a pas d'adresse de myVariable = 10 dans la mémoire, cela donne une erreur de référence.
Le mot-clé const vous permet de créer des constantes, qui sont des variables qui ne peuvent pas être réaffectées une fois qu'une valeur leur est attribuée.
const PI = 3.142; PI = 22/7; // Attempt to reassign the value of PI console.log(PI); // Output: TypeError: Assignment to constant variable
Dans cet exemple, nous définissons PI it comme une constante avec une valeur initiale de 3,142. Lorsque nous essayons de réattribuer une nouvelle valeur à PI, une TypeError est générée car les constantes ne peuvent pas être réaffectées.
const PI; console.log(PI); // Output: SyntaxError: Missing initializer in const declaration PI = 3.142;
Dans ce cas, nous déclarons un PI constant sans l'initialiser. Ce code renvoie une SyntaxError car les constantes doivent être déclarées et initialisées en même temps.
function getCircumference(radius) { console.log(circumference); circumference = PI * radius * 2; const PI = 22/7; } getCircumference(2); // ReferenceError: circumference is not defined
Ici, dans la fonction getCircumference, nous essayons d'accéder à la circonférence avant sa déclaration. Il renvoie une ReferenceError car la variable n'est pas encore définie.
Lors de l'utilisation de const, il est nécessaire de déclarer et d'initialiser la variable avant de l'utiliser.
Dans l'ensemble, var et let sont tous deux hissés en JavaScript, mais leur comportement et le concept de zone morte temporelle ne s'appliquent qu'aux variables let. const crée des constantes qui ne peuvent pas être réaffectées une fois initialisées.
function hoisted() { a = 20; var b = 100; } hoisted(); console.log(a); // 20 // can be accessed as a global variable outside the hoisted() function. console.log(b); // As it is declared, it is bound within the bounds of the hoisted() function. We cannot print it outside the hoisted() function. output: ReferenceError: b is not defined
Nous pouvons voir que la déclaration de la variable de message var dans le cadre de la fonction hoist() va en haut de la fonction.
Pour éviter ce problème, nous veillerons à déclarer la variable avant de l'utiliser.
Dans les deux exemples que vous avez fournis, le résultat ne sera pas défini.
function hoist() { console.log(message); var message = 'Hoisting is all the rage!'; } hoist(); // Output: undefined
function hoist() { var message; console.log(message); message = 'Hoisting is all the rage!'; } hoist(); // Output: undefined
Dans les deux cas, la sortie n'est pas définie car les variables sont hissées au sommet de leurs portées respectives mais leur affectation se produit ensuite dans l'ordre d'origine du code.
Les expressions de fonction ne sont pas levées et renvoient une TypeError car l'expression est traitée comme une variable et non comme une fonction.
expression(); // Output: "TypeError: expression is not a function var expression = function() { console.log('Will this work?'); };
De par son nom, il s'agit d'une variante restreinte de JavaScript qui ne tolérera pas l'utilisation de variables avant qu'elles ne soient déclarées. Exécuter notre code en mode strict :
Élimine certaines erreurs JavaScript silencieuses en les remplaçant par des erreurs de lancement explicites.
Corrige les erreurs qui rendent difficile l'optimisation des moteurs JavaScript.
Vous risquez de ne pas avoir déclaré la variable, utilisez strict qui vous a arrêté en lançant une erreur de référence.
'use strict'; console.log(hoist); // Output: ReferenceError: hoist is not defined hoist = 'Hoisted';
Il est important de comprendre le levage en JavaScript lors de la déclaration de variables et de fonctions. Au fur et à mesure que le levage est expliqué, vous comprendrez comment le code JavaScript est réellement géré.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3