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; });
比如这样就会报错。
标签:ES6,const,变量,作用域,let,var,报错,声明 From: https://www.cnblogs.com/luyShare/p/17532314.html