let
let 表示申明变量,使用let声明变量的语法和使用var声明的语法是一样的。
let与var的区别
作用域不同:用 let 声明的变量具有块级作用域,只能在声明的块中访问,在块外面无法访问; var定义的变量是函数作用域[局部的],但在if、for等定义的变量是全局的。
同一个变量声明的次数:在同一个作用域中同一个变量let只能声明一次, 而var可以多次声明;因此, let声明的变量可以避免全局变星被污染。
是否有变量预解析: var声明的变量存在变量提升,而let则没有变量提升,let声明的变量要先定义后使用。
let有暂时性死区: let声明的变量要先定义后使用。(// Cannot access i' before initialization);
var不会报错,而是打印undefined。
变量的绑定归属: let声明的变量不会绑定到顶层对象,即在全局作用域中用let声明的变量,使用window.变量名不会生效
count
const是用来定义常量的。常量就是在整个程序运行期间其值是固定不变的。
- 它的特性与let一样,只能在块级作用域中有效,不能重复声明,不存在变量提升,不会成为window的属性,但是它一旦声明就不能再修改值
- 如果声明基本数据类型,声明后是不能修改的,但是如果声明引用数据类型,则可以修改其属性的值
const swk = {
name: '孙悟空',
age: 600
}
swk.name = '美猴王'
console.log(swk.name)//美猴王 修改name属性的值成功
- 在let和const声明前的这段区域称之为暂存性死区
- 暂时性死区:暂时性死区是ES6语法引入let和const后才引入的,是指在一个块级作用域中,存在一个死区,开始于函数的开头,结束于变量声明的那一行,在这个死区内,无法访问let或const声明的变量。
- 使用let和const声明的变量和常量不再是window的属性。 也就是说通过window.a是无法访问到的。