Il existe trois manières différentes de déclarer des variables en Javascript : let, var et const. Let et const se comportent de la même manière dans l'environnement lexical, mais var est très différent. Var a été introduit au début et n'est généralement pas utilisé dans le Javascript moderne, mais l'ancien code est partout. Cet article l'explique en détail, dans l'espoir de ne pas confondre. toi.
function sayHi() { var phrase = "Hello"; // local variable, "var" instead of "let" alert(phrase); // Hello } sayHi(); alert(phrase); // Error, phrase is not defined
Ce qui suit est différent, var n'a pas de zone de bloc, c'est seulement une zone globale ou fonctionnelle, et peut être traversée par une zone de bloc.
if (true) { var test = true; // use "var" instead of "let" } alert(test); // true, the variable lives after if
Si nous utilisons let dans la deuxième ligne, test n'est pas accessible dans l'instruction alter. Mais var ignore le bloc de code, nous déclarons donc la variable de test comme variable globale.
Il en va de même pour les boucles. var ne peut pas être une zone de bloc ou une zone de boucle locale :
for(var i = 0; i < 10; i++) { // ... } alert(i); // 10, "i" is visible after loop, it's a global variable
Si le bloc de code est dans une fonction, alors var devient un niveau de fonction. variable :
function sayHi() { if (true) { var phrase = "Hello"; } alert(phrase); // works } sayHi(); alert(phrase); // Error: phrase is not defined
Comme vous pouvez le voir, var passe par if, pour ou d'autres blocs de code. À cette époque, les premiers blocs Javascript n'avaient pas d'environnement lexical, et var est un héritage des premiers jours.
La déclaration var est traitée au début de la fonction (ou au début du script, pour les variables globales). En d'autres termes, la variable var est déclarée au début de la fonction, peu importe où elle est définie (en supposant qu'elle ne soit pas définie dans une fonction imbriquée). Exemple de code :
function sayHi() {
phrase = "Bonjour";
alert(phrase); var phrase; }
a le même effet que le code suivant :
function sayHi() { var phrase; phrase = "Hello"; alert(phrase); }
Même dans les blocs de code ignorés :
function sayHi() { phrase = "Hello"; // (*) if (false) { var phrase; } alert(phrase); }
De manière générale Ce comportement est appelé « levage » car toutes les variables sont hissées au sommet de la fonction. Ainsi, la section de code if(false) de l'exemple n'est jamais exécutée, mais cela n'a pas d'importance, var est promue en haut de la fonction et toutes les variables de la ligne (*) de l'exemple existent déjà.
La déclaration est promue, mais l'affectation n'est pas promue
L'exemple de démonstration est le suivant :
function sayHi() {
alert(phrase);
var phrase = "Hello"; } sayHi();
var = phrase = « Bonjour » a deux actions
1. Déclarer la variable var
2. L'affectation de la variable =
la déclaration est promue. en haut de la fonction, mais l'affectation est toujours à l'endroit d'origine, donc l'effet réel du code est le suivant :
function sayHi() { var phrase; // declaration works at the start... alert(phrase); // undefined phrase = "Hello"; // ...assignment - when the execution reaches it. } sayHi();
Parce que toutes les déclarations sont promues en haut de la fonction, nous peut le référencer ailleurs dans la fonction, mais les variables ne sont pas définies avant l'affectation. Les deux exemples d’alertes ci-dessus s’exécutent sans erreur. Étant donné que l'expression variable existe déjà mais qu'aucune valeur n'a été affectée, undefined s'affiche.
Il existe deux différences principales pour var :
1 Les variables n'ont pas de portée de bloc et la portée minimale visible est le niveau de fonction.
2. La déclaration de variable est promue en haut de la fonction.
Cette différence n'est pas une bonne chose dans la plupart des cas. Nous ne pouvons pas créer de variables au niveau du bloc et occuper plus de mémoire ; augmenter la position de la variable laisse plus de place aux erreurs. Par conséquent, les nouvelles variables de script sont rarement utilisées.
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!