在Javascript 中我们常用var 来定义变量。
在ES6中新增了let,let的三个新特性,
1. 块级作用域
2. 暂时性死区
3. 不允许在一个封闭作用域,声明同一个变量。
1.块级作用域
ES6
新增了let
命令,用来声明变量
。它的用法类似于var
,但是所声明的变量,只在let
命令所在的代码块内有效
。
{
let a=222222;
var b=333333;
}
a // ReferenceError: a is not defined.b // 333333
以上代码在代码块之中,分别用let
和var
声明了两个变量。
然后,在代码块之外调用这两个变量。结果let
声明的变量报错
,var
声明的变量返回了正确的值
。这表明,let
声明的变量
只在它所在的代码块有效
。
2.let 暂时性死区
代码语言:javascript复制var num=111;
if(true){
num = "good"; // ReferenceError
let num=222; //块级作用域内let又声明了一个局部变量num,导致后者绑定这个块级作用域
}
ES6明确规定,如果区块
中存在let
和const
命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域
。凡是在声明之前
就使用这些变量就会报错
。
总之,在代码块内使用let
命令声明变量之前,该变量都是不可用的。
这在语法上,称为“暂时性死区”
(temporal dead zone,简称 TDZ)
3.let
不允许在相同作用域内,重复声明
同一个变量
。
代码语言:javascript复制let num=111;
let num=222; // 报错内容:Identifier 'num' has already been declared
但是var 不存在以上的问题,