-
var/let/const -
变量提升和函数提升
-
暂时性死区
-
函数作用域和全局作用域(ES5)
-
块级作用域(ES6)
-
判断变量类型
1. var
a. 变量提升
var变量的作用域在该句所在的函数内, 且可以函数变量提升
b. 全局作用域
var只有全局作用域和函数作用域概念,没有块级作用域的概念。但是会把{}内也假称为块作用域。
2. let
a. 块级作用域
只有块级作用域的概念 ,由 { } 包括起来,if语句和for语句里面的{ }也属于块级作用域。
b. 暂时性死区
不能进行变量提升, 变量声明之前引用都会报错
c. 不允许重复声明变量否则会报错
d. 全局对象/全局变量
es5中全局对象和全局变量在使用上没什么区别, 但是全局声明的变量不能通过deletewindow/global上删除
es6中, let 和 const声明的全局变量不属于全局对象上挂载的属性
3. const
a. const 变量和let区别不大, 主要是在于const不能被赋值, 且变量必须经过初始化
b. const声明的普通变量是不能被赋值的,但是如果声明的是复杂数据类型可能就不受控制了,因为变量只是存储复杂数据类型的地址