之前我们学习过的定义变量的关键字有哪些呢?var function,
今天我们要来看的是es6中的let 和const关键字,首先来看let,
let基本用法
let命令只在其所在的代码块内有效。
{
let a = 10;
var b = 20;
console.log(a); //10
}
console.log(a); //a is not defined
console.log(b); //20
在上面代码中,分别用var let 声明了两个变量,在代码块之外输出这两个变量,结果可以看到,var声明的变量输出了正确的值,let声明的变量则报错,在代码块内则会输出正确结果,说明let只在其所在的代码块内有效。
let与var的区别:
1.var是全局声明,let是块级作用的,只适用于当前代码块。
2.var会变量提升。let不会,(必须先定义,在使用)。
3.var 会造成重复赋值,let 不能重复声明同一个变量。
4.var定义的变量会作为window对象的属性,let定义的变量则不会。
5.let中有暂时性性死区:
暂时性死区:只要块级作用域内存在let命令,它所声明的变量就不再受外部的影响。ES6 明确规定,如果区块中存在let命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。
const基本用法
1.const定义的变量不可以重复赋值,而且必须初始化。
const A;
console.log(A);//error
变量a未初始化,直接会报错。而使用var和 let声明的变量未初始化输出时显示undefined。
2.const和let一样,是块级作用的,只适用于当前代码块。
{ const B = 1; }
console.log(B)// B is not defined
3.const声明的变量称为常量,常量为不可改变的,且一般使用大写标识。
4.const声明的变量不可变,但堆中的值可变,若想堆中的值不变,需要使用object.freeze冻结。
//堆中值可变
const arr = [100, 200];
arr[0] = 10;
console.log(arr[0]); //10
//冻结后不可变
arr1 = Object.freeze([100,200]);
console.log(arr1);
arr1[0] = 10;
console.log(arr1[0]); //100