1.let和const使用时必须先声明在使用,不存在像var声明变量时的变量提升;
2.es6语法中引入了块级作用域的概念,let和const声明的变量只在本身所在的代码块内生效;(let会出现暂时性死区);
3.let和const在同一作用域不可重复申声明;
4.let和const声明的全局变量,不属于顶层对象(window)的属性。
5.const声明的变量如果类型为简单数据类型是不可再次更改该变量的,但是声明的变量值为复杂数据类型时就可以更改;
注:因为const本事并不是让变量的值不可以改变,而是让变量所指向的内存地址的数据不可以改变,对于简单数据类型值就保存在变量所指向的内存地址,所以等同为常量;而复合数据类型变量指向的内存地址保存的只是实际数据的一个指针,只要指针不发生改变就可以,值是可以改变的
块级作用域
es5 只有全局作用域和函数作用域,没有块级作用域,这带来很多不合理的场景。
第一种场景,内层变量可能会覆盖外层变量。
第二种场景,用来计数的循环变量泄露为全局变量。
let和const实际上为 javascript 新增了块级作用域
内层作用域可以定义外层作用域的同名变量。外层作用域无法读取内层作用域的变量。
s6 允许块级作用域的任意嵌套。
如对本文有疑问, 点击进行留言回复!!
网友评论