与var的区别
区别一:
let关键字:
- 从直观的角度来说,let和var是没有太大的区别的,都是用于声明一个变量
const关键字:
- const关键字是constant的单词的缩写,表示常量、衡量的意思;
- 它表示保存的数据一旦被赋值,就不能被修改;但是如果赋值的是引用类型,那么可以通过引用找到对应的对象,修改对象的内容;
此外let、const不允许重复声明变量
作用域提升:
var声明的变量是会进行作用域提升的,使用let声明的变量,在声明之前访问会报错;
image.png
维基百科并没有对作用域提升有严格的概念解释,那么我们自己从字面量上理解;
- 作用域提升:在声明变量的作用域中,如果这个变量可以在声明之前被访问,那么我们可以称之为作用域提升;
- 在这里,它虽然被创建出来了,但是不能被访问,我认为不能称之为作用域提升;
- 所以我们可以认为let、const没有进行作用域提升,但是会在解析阶段被创建出来
块级作用域
JavaScript只会形成两个作用域:全局作用域和函数作用域。
image.png
ES5中放到一个代码中定义的变量,外面是可以访问的
image.png
const、let中
在ES6中新增了块级作用域,并且通过let、const、function、class声明的标识符是具备块级作用域的限制的
我们发现函数拥有块级作用域,但是外面依然是可以访问的:这是因为引擎会对函数的声明进行特殊的处理,允许像var那样进行提升;
典型应用:
-
不必在使用立即执行函数,为i添加一个特定的函数作用域
ies5.png
网友评论