let
- 用于声明变量,类似于var,但是所声明的变量只在let命令所在的代码块内有效。
- 不存在变量提升,变量一定要在声明后才能使用命令。
- 暂时性死区,如果区块中存在let和const命令,这个区块对这些命令声明的变量,形成了封闭作用域
- 不能在相同的作用域内,重复声明同一个变量
块级作用域
- 外层作用域无法读取内层作用域的变量
- 内层作用域可以定义外层作用域的同名变量
- es5规定函数只能在顶层作用域和函数作用域之中声明,不能在块级作用域中声明
- es6明确允许在块级作用域中声明函数
- 函数声明语句的行为类似于let,在块级作用域之外不可引用
const命令
- const声明一个只读变量,常量的值不能改变
- 一旦声明,必须初始化,否则会报错
- const和let命令相同,只在声明所在的块级作用域内有效
- 不存在变量提升,也存在暂时性死区,只能在声明之后使用
- 不能重复声明
顶层对象的属性
- es5顶层对象的属性与全局变量是等价的
- var、function命令声明的全局变量,依旧是顶层对象的属性
- let、const、class命令声明的全局变量不属于顶层对象的属性
顶层对象