Ajout des commandes const et let pour déclarer des variables.
声明方式 | 变量提升 | 作用域 | 初始值 | 重复定义 |
const | 否 | 块级 | 需要 | 不允许 |
let | 否 | 块级 | 不需要 | 不允许 |
var | 是 | 函数级 | 不需要 | 允许 |
Promotion variable : const et let doivent être déclarés avant utilisation. La promotion variable n'est pas prise en charge
console.log(c1, l1, v1); // 报错 // Uncaught ReferenceError: c1 is not defined const c1 = 'c1'; let l1 = 'l1'; var v1 = 'v1';
Portée : const, let prend en charge la portée au niveau du bloc, évitant ainsi la couverture variable
const c21 = 'c21'; let l21 = 'l21'; var v21 = 'v21'; if (0.1 + 0.2 != 0.3) { const c21 = 'c22'; let l21 = 'l22'; var v21 = 'v22'; console.log(c21, l21, v21); // 输出 c22 l22 v22 } console.log(c21, l21, v21); // 输出 c21 l21 v22
la portée au niveau du bloc, qui ne peut pas être utilisé dans la couche externe Accédez directement aux variables internes
if (0.1 + 0.2 != 0.3) { const c22 = 'c22'; let l22 = 'l22'; var v22 = 'v22'; console.log(c22, l22, v22); // 输出 c22 l22 v22 } console.log(c22, l22, v22); // 报错 // Uncaught ReferenceError: c22 is not defined // 同样地, l22 is not defined
const définit une constante La constante ne peut pas se voir attribuer une valeur, mais les propriétés de la constante peuvent se voir attribuer une valeur.
const c231 = {}; const c232 = []; c231.name = 'seven'; c232.push(27); console.log(c231, c232); // 输出 {name: "seven"} [27] // 禁止给对象赋值,应该使用 Object.freeze const c233 = Object.freeze({}); const c234 = Object.freeze([]); c233.name = 'seven'; // 普通模式下不报错 // 严格模式下报错 // Uncaught TypeError: Cannot add property name, object is not extensible c234.push(27); // 普通模式下就会报错 // Uncaught TypeError: Cannot add property 0, object is not extensible console.log(c233, c234); // 输出 {} []
Les variables globales ne sont plus définies comme attributs de l'objet de niveau supérieur (fenêtre), évitant ainsi la pollution des variables globales
const c24 = 'c24'; let l24 = 'l24'; console.log(c24, l24); // 输出 c24 l24 console.log(window.c24, window.l24); // 输出 undefined undefined
Conforme à la boucle for attendue
for (var i = 0; i != 3; i++) { setTimeout(function() { console.log(i); },10); } // 依次打印 for (let i = 0; i != 3; i++) { setTimeout(function() { console.log(i); },10); } // 依次打印,为啥呢
Vous pouvez le voir en utilisant la méthode let dans la boucle for pour déclarer des variables est conforme aux attentes.
À chaque fois dans la boucle for, let redéclare la variable, et comme le moteur JavaScript se souviendra de la valeur de la dernière boucle, l'initialisation de i est calculée en fonction du tour précédent.
Vous pouvez voir qu'il y a au moins deux niveaux de portée dans la boucle for. C'est plus facile à comprendre en regardant l'exemple ci-dessous.
for (let i = 0; i != 3; i++) { let i = 'seven'; console.log(i); } console.log('eight'); // 依次打印 seven seven seven eight
Valeur initiale : const La variable déclarée doit avoir une valeur initiale et ne peut pas être assignée à plusieurs reprises.
const c3 = 'c3'; let l3 = 'l3'; var v3 = 'v3'; console.log(c3, l3, v3); // 输出 c3 l3 v3 c3 = 2; // Uncaught TypeError: Assignment to constant variable l3 = 2; v3 = 2; console.log(c3, l3, v3); // 输出 c3 2 2 const c32; // 报错 // Uncaught SyntaxError: Missing initializer in const declaration
Définition en double : const et let ne prennent pas en charge la définition répétée
const et let réduisent la portée de la variable et évitent parfaitement la pollution variable const ; Les variables fixes (c'est-à-dire les types de variables fixes) peuvent améliorer considérablement les performances du JavaScript faiblement typé. Il est recommandé d'utiliser const et let pour déclarer des variables dans l'application.
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!