ES6 let命令
ES6
中新增了 let
命令,可以用于声明变量。下面我们就一起来看一下 let
命令的使用。
使用let声明变量
let
命令是 ES6
中新增的用于声明变量的一个命令,声明变量时的用法和 JavaScript 中的 var
类似。
示例:
例如下面我们使用 let
命令来声明变量:
let a = 10;
let b = 20;
let c = 30;
let 声明的变量只在代码块内有效
let
命令的使用虽然和 var
类似,但是两者还是有区别的,例如使用 let
声明的变量,只在 let
所在的代码块内有效。这是什么意思呢,下面我们通过一个例子来讲解一下。
示例:
例如我们在一段代码块中同时使用 let
和 var
来声明一个变量,然后在代码块外使用这个变量:
{
var a = 10;
let b = 20;
}
console.log(a);
console.log(b);
当我们我们执行这段代码时,输出结果会报错,下面为错误提示:
ReferenceError: b is not defined
这个错误告诉我们,变量 b
没有被声明,但是我们明明在 {}
中声明了变量 b
,这表示 let
声明的变量只在它所在的代码块有效,在代码块外使用变量 b
会报错。
let不允许重复声明变量
let
命令和 var
命令还有一个不同就是,let
命令只能声明同一个变量一次,而 var
可以声明一个变量多次。
示例:
例如我们使用 var
声明变量 a
两次:
var a = 1;
var a = 2;
console.log(a);
执行代码后输出结果为 “2”,这表示当声明一个变量多次时,后面会覆盖前面的。
接着我们再试一下使用 let
声明变量 a
两次:
let a = 1;
let a = 2;
当执行代码时会输出如下所示错误提示:
SyntaxError:Identifier 'a' has already been declared
其中 SyntaxError
表示这个一个语法错误,告诉我们变量 a
已经被声明,不能再次被声明。
let不支持变量提升
let
不存在变量提升的现象,而 var
命令会变量提升。变量提升是什么意思呢,就是变量可以在声明之前使用,值为 undefined
。
示例:
例如我们先使用变量 v
,再通过 var
声明这个变量,执行代码后会输出 undefined
:
console.log(v);
var v = 100;
而如果先使用变量 l
,再通过 let
命令声明这个变量:
console.log(l);
let l = 100;
当执行代码后会报错,报错内容如下所示:
ReferenceError: Cannot access 'l' before initialization
这表示通过 let
声明的变量,在被声明之前是不允许使用的,这就是说不存在变量提升的现象。
暂时性死区
当一个块级作用域内存在 let
命令时,它所声明的变量就“绑定”(binding)了这个区域,不再受外部的影响。
示例:
例如下面这段代码:
var a = 10; // 声明全局变量a
if (true) {
a = 20;
let a; // 在代码块中声明局部变量a,此时变量 a 绑定了这个代码块
}
执行代码后会报如下所示:
ReferenceError: Cannot access 'a' before initialization
这段代码表示,如果我们在一个代码块中使用 let
声明一个变量,那么就形成了封闭作用域,就形成了封闭作用域,既然在之前声明了全局变量也一样。
所以要注意,如果使用 let
命令在代码块内声明变量,那么在声明变量之前,该变量都是不可用的。这在语法上称为 “暂时性死区”。