Les variables déclarées par let et const ne sont valides que dans le bloc de code.
{Soit a = 10; var b = 1;} a // ReferenceError: a n'est pas défini.b // 1Aucune promotion variable
Les variables doivent être utilisées après la déclaration, sinon une erreur sera signalée.
var tmp = 123; if (true) {tmp = 'abc'; // ReferenceErrorlet TMP;}Les déclarations répétées ne sont pas autorisées
// Fonction d'erreur () {Soit a = 10; var a = 1;}Portée au niveau du bloc
fonction f () {console.log ('je suis à l'extérieur!'); } (function () {if (false) {// répéter la fonction de fonction f () {console.log ('je suis à l'intérieur!');}} f ();} ()); // je suis à l'intérieur! Promotion de la fonction ES5 // Je suis dehors! Étendue au niveau du bloc ES6commande const de const
Déclarez une constante en lecture seule. Une fois déclaré, la valeur de la constante ne peut pas être modifiée.
Une fois qu'une variable est déclarée, elle doit être initialisée immédiatement et ne peut pas être laissée plus tard.
Les variables globales déclarées par la commande LET, la commande const et la commande de classe n'appartiennent pas aux propriétés de l'objet global.
var a = 1; // Si dans l'environnement des réponses du nœud, il peut être écrit comme global.a // ou en utilisant une méthode générale, il peut être écrit comme this.awindow.a // 1let b = 1; window.b // non défini
Ensuite, je vous présenterai la commande const de ES6 séparément
JS, qui a toujours été centré sur l'ECMA, n'a jamais eu le concept de constantes, et ES6 a compensé ce défaut;
const foo = 'foo'; foo = 'bar'; // typeError: affectation à la variable constante.
L'exemple ci-dessus déclare une constante du type de base. Si vous essayez de modifier la valeur initiale, une erreur sera signalée; S'il s'agit d'une valeur du type de référence, cela s'applique également, mais une chose doit être prête à l'attention, donnez un exemple:
const foo = []; foo = [1]; // Affectation à une variable constante.
Une erreur normale, pas de problème, regardez à nouveau:
const foo = [1,2,3]; foo [1] = 4; console.log (foo) // [1, 4, 3]
Pourquoi n'y a-t-il pas d'erreur? Et peut-il être modifié avec succès? La différence entre ces deux exemples est que le premier a changé le contenu correspondant du pointeur (doit être familier avec le type de référence JS) et le second n'a pas encore changé le pointage mais le contenu de l'objet pointant a changé. Pour FOO, je ne suis qu'un pointeur responsable de pointer vers l'objet correspondant. Quant au contenu de l'objet, je ne me soucie pas de mon entreprise, donc je peux le modifier; Si je ne veux pas que le contenu change, je peux utiliser une autre méthode;
const foo = object.freeze ([1,2,3]); foo [1] = 4; console.log (foo) // [1, 2, 3]
De cette façon, vous n'avez pas à vous soucier d'être modifié;