La diferencia entre var, let y const en JavaScripct

En ES5, solo hay dos formas de declaración de variable: var y función. Pero debido a que la variable declarada por var tiene ciertas desventajas, ES6 propone el uso de let y const para declarar variables, veamos la diferencia entre ellas.

1. ¿Existe una promoción variable?

La variable declarada por var tiene promoción variable (la variable se promueve a la parte superior del alcance actual). Es decir, la variable se puede llamar antes de la declaración y el valor no está definido.

No existe promoción variable para alquiler y const. Es decir, las variables que declaran deben usarse después de la declaración, de lo contrario se informará ReferenceError.

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. ¿Existe una zona muerta temporal?

Dejemos que y const tengan una zona muerta temporal. Es decir, siempre que haya un comando let en el alcance a nivel de bloque, las variables declaradas por él están "vinculadas" a esta área y ya no se ven afectadas por influencias externas.

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

在代码块内,使用let命令声明变量之前,该变量都是不可用的。Esto se llama gramaticalmente "zona muerta temporal" (TDZ para abreviar).
En definitiva, la esencia de la zona muerta temporal es que nada más entrar en el ámbito actual, la variable a utilizar ya existe, pero no está disponible. Solo cuando aparece la línea de código que declara la variable, se puede obtener y utilizar la variable.

3. ¿Está permitido declarar variables repetidamente?

var permite la declaración repetida de variables.
Let y const no pueden declarar variables repetidamente en el mismo ámbito.

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 un alcance a nivel de bloque?

No hay alcance a nivel de bloque para la var.
Let y const tienen alcance a nivel de bloque.

¿Qué es el alcance a nivel de bloque?

Los alcances en ES5 son: alcance global y alcance de función. No existe el concepto de alcance de bloque. Por tanto, también hay una serie de problemas.

5. ¿Se pueden modificar las variables declaradas?

Var y vamos bien.
const declara una constante de solo lectura. Una vez declarado, el valor de la constante no se puede cambiar. La variable declarada por const no debe cambiar el valor, lo que significa que una vez que const declara la variable, debe inicializarse inmediatamente y no puede dejarse para una asignación posterior.

Supongo que te gusta

Origin blog.csdn.net/zxlong020/article/details/108435749
Recomendado
Clasificación