Maison > interface Web > tutoriel HTML > Explication détaillée de la comparaison entre const, let et var en JavaScript ES6

Explication détaillée de la comparaison entre const, let et var en JavaScript ES6

陈政宽~
Libérer: 2017-06-28 14:25:34
original
1615 Les gens l'ont consulté

Cet article vous présente principalement les informations pertinentes sur la comparaison de const, let et var en JavaScript L'article le présente en détail à travers un exemple de code, qui a une certaine valeur de référence et d'apprentissage pour tout le monde. C’est nécessaire les amis, suivons l’éditeur et jetons un oeil.

ECMAScript 6 Nouveau les commandes const et let sont ajoutées pour déclarer les 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';
Copier après la connexion


Portée : const, permet de prendre en charge la portée au niveau du bloc, évitant efficacement 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
Copier après la connexion


Portée au niveau du bloc, les variables internes ne sont pas directement accessibles depuis la couche externe


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


const définit une constante Cette constante ne peut pas se voir attribuer de valeur, mais son attribut peut se voir attribuer une valeur


<. 🎜>

const c231 = {};
const c232 = [];
 
c231.name = &#39;seven&#39;;
c232.push(27);
 
console.log(c231, c232);
// 输出 {name: "seven"} [27]
 
// 禁止给对象赋值,应该使用 Object.freeze
 
const c233 = Object.freeze({});
const c234 = Object.freeze([]);
 
c233.name = &#39;seven&#39;;
// 普通模式下不报错
// 严格模式下报错
// 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);
// 输出 {} []
Copier après la connexion


Les variables globales ne sont plus définies comme attributs de l'objet de niveau supérieur (fenêtre), évitant ainsi efficacement la pollution des variables globales


const c24 = &#39;c24&#39;;
let l24 = &#39;l24&#39;;
 
console.log(c24, l24);
// 输出 c24 l24
 
console.log(window.c24, window.l24);
// 输出 undefined undefined
Copier après la connexion


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);
}
// 依次打印,为啥呢
Copier après la connexion


Vous pouvez voir que l'instruction let est utilisée dans la boucle for. Les variables correspondent à ce qui est attendu.


À 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 = &#39;seven&#39;;
 console.log(i);
}
console.log(&#39;eight&#39;);
// 依次打印
seven
seven
seven
eight
Copier après la connexion


Valeur initiale : const La variable déclarée doit avoir une valeur initiale définie et ne peut pas être attribuée à plusieurs reprises.


const c3 = &#39;c3&#39;;
let l3 = &#39;l3&#39;;
var v3 = &#39;v3&#39;;
 
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
Copier après la connexion


Définition en double : const et let ne prennent pas en charge la définition répétée

const et let réduisent le rôle du domaine des variables, évitant parfaitement la pollution variable ; les variables fixes const (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.

Résumé

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