ES6的let命令(二)

来源:互联网 发布:淘宝店交易平台 编辑:程序博客网 时间:2024/06/03 04:43

2.暂时性死区

暂时性死区是指只要块级作用域内存在let命令,它所声明的变量就绑定这个作用域,不会受到外部的影响。

       var num=12;

    if(true){

     num=20;

     let num;

    }

 

运行之后,在num=20这一行会出现如下错误


从上述代码,显然可以看出,我们用var定义看一个全局变量,但是在if语句中,我们首先修改的变量num的值,然后在块级作用域内le又定义了名也为num的局部变量。导致后者绑定这个块级作用域此,所以在let声明变量前,对num赋值会报错。

ES6明确规定,如果区块中存在letconst命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。

 

总之,在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称TDZ)。

ES6规定暂死性区和不存在变量提升,主要是为了减少运行时错误,防止在变量声明前就使用这个变量,从而导致意料之外的行为。这样的错误在ES5是很常见的,现在有了这种规定,避免此类错误就很容易了。

 

0 0
原创粉丝点击