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

Différences et similitudes entre var et let en Javascript

黄舟
Libérer: 2017-08-08 13:52:21
original
1534 Les gens l'ont consulté


La différence entre var et let en Javascript

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.

Exemple 1 Les deux sont identiques

function sayHi() {
  var phrase = "Hello"; // local variable, "var" instead of "let"

  alert(phrase); // Hello
}

sayHi();

alert(phrase); // Error, phrase is not defined
Copier après la connexion

Exemple 2 Les deux sont différents

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
Copier après la connexion

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&#39;s a global variable
Copier après la connexion

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
Copier après la connexion

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.

var est traité au début de la fonction

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;
}
Copier après la connexion

a le même effet que le code suivant :

function sayHi() {
  var phrase;

  phrase = "Hello";

  alert(phrase);
}
Copier après la connexion

Même dans les blocs de code ignorés :

function sayHi() {
  phrase = "Hello"; // (*)

  if (false) {
    var phrase;
  }

  alert(phrase);
}
Copier après la connexion

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();
Copier après la connexion

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();
Copier après la connexion

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.

Résumé

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!

Étiquettes associées:
source:php.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!