La différence entre var, let et const dans JavaScripct

Dans ES5, il n'y a que deux formes de déclaration de variable: var et function. Mais comme les variables déclarées par var ont certains inconvénients, ES6 propose l'utilisation de let et const pour déclarer des variables, voyons la différence entre elles.

1. Y a-t-il une promotion variable?

La variable déclarée par var a une variable promotion (la variable est promue en haut de la portée actuelle). Autrement dit, la variable peut être appelée avant la déclaration et la valeur n'est pas définie.

La promotion de variable n'existe pas pour let et const. Autrement dit, les variables qu'ils déclarent doivent être utilisées après la déclaration, sinon ReferenceError sera signalée.

console.log(f) //undefined
var f = 1 ;

console.log(g) //ReferenceError: g is not defined
let g = 2;

console.log(h) //ReferenceError: g is not defined
const h = 2;

2. Y a-t-il une zone morte temporaire?

Laissez et const ont une zone morte temporaire. Autrement dit, tant qu'il existe une commande let dans la portée de niveau bloc, les variables déclarées par celle-ci sont "liées" à cette zone et ne sont plus affectées par des influences externes.

var tmp = 123;
if (true) {
    
    
  tmp = 'abc'; // ReferenceError
  let tmp;
}
//以上代码if后面{
    
    }形成了块级作用域,由于使用let声明了tmp,则这个变量就绑定了块区域,在声明之前使用,会报错。

在代码块内,使用let命令声明变量之前,该变量都是不可用的。Ceci est grammaticalement appelé "zone morte temporelle" (TDZ pour faire court).
En bref, l'essence de la zone morte temporaire est que dès qu'elle entre dans la portée actuelle, la variable à utiliser existe déjà, mais elle n'est pas disponible. Ce n'est que lorsque la ligne de code qui déclare la variable apparaît que la variable peut être obtenue et utilisée.

3. Est-il autorisé à déclarer des variables à plusieurs reprises?

var permet la déclaration répétée de variables.
Let et const ne sont pas autorisés à déclarer des variables à plusieurs reprises dans la même portée.

var f = 4;
var f = 5;
console.log(5) //5

let g = 6;
let g = 7;
console.log(7) //SyntaxError: Identifier 'g' has already been declared

const h = 8;
const h = 9;
console.log(h) //SyntaxError: Identifier 'g' has already been declared

4. Existe-t-il une portée au niveau du bloc?

Il n'y a pas de portée au niveau du bloc pour var.
Laissez et const ont une portée au niveau du bloc.

Qu'est-ce que la portée au niveau du bloc:

Les portées dans ES5 sont: la portée globale et la portée de la fonction. Il n'y a pas de concept de portée de bloc. Par conséquent, il existe également une série de problèmes.

5. Les variables déclarées peuvent-elles être modifiées?

Var et laissez vont bien.
const déclare une constante en lecture seule. Une fois déclarée, la valeur de la constante ne peut pas être modifiée. La variable déclarée par const ne doit pas changer la valeur, ce qui signifie qu'une fois que const déclare la variable, elle doit être initialisée immédiatement et ne peut pas être laissée pour une affectation ultérieure.

Je suppose que tu aimes

Origine blog.csdn.net/zxlong020/article/details/108435749
conseillé
Classement