ES6 的 新特性 1 let,const

发布时间 2023-07-06 16:16:07作者: luytest

Let,Const,Var 可以放一起说

这三个都是JS中用来声明变量的关键字。

主要的区别是

1.作用域

Var声明的变量的作用域是当前的执行上下文,也就是说,如果在函数外部声明,则是全局变量,如果是函数内部声明,则是整个函数块的变量。

Let声明的变量的作用域则是当前的代码块,也就是说可以像var一样是全局或者整个函数块,也可以是if,for,while等用{}括起来的代码块中的变量。

    $(function () {
        var a = 1;
        if(1==1)
        {
            var a = 2;
            alert(a);
        }
        alert(a);

        let b = 1;
        if(1==1)
        {
            let b = 2;
            alert(b);
        }
        alert(b);
    });

这个例子中,a两次弹出都是2,因为a在function中是同一个变量,而b分别弹出2,1,因为不是同一个变量。

可以看出,let声明的变量可以有更小的有效范围,更加灵活。

 

2.重复声明

在同一作用域中,var 可以重复声明,但是let不行。

以上面的代码为例,把 if 这个代码块删掉,只保留里面的声明部分。var 声明了 两次a变量,不会报错,但是let声明两次会报错,因为此时两次声明b都发生在同一个作用域中。

 

3.变量提升和暂存死区

var 声明的变量存在变量提升

简单来说就是变量可以先使用,后声明,只是先使用的时候不会报错,而是值是undefind,原因是var 声明的变量,在执行上下文创建的阶段就被 创建+初始化,只是没有赋值。

而let不会,只会报错,因为 在执行上下文创建的阶段 只会 创建,没有初始化,而使用未初始化的变量是会报错的。

 

4. Const 与 let

两者很类似,唯一的区别就是,const声明的变量不能改变值,声明时必须赋值。

    $(function () {
       const a = 1;
       a = 2;

    });

比如这样就会报错。