传统声明var
- 变量提升
- 声明即初始化
- 全局作用域声明时,属于顶层对象的属性。在浏览器环境下,属于window的属性
对比let
- 块级作用域
- 无变量提升
- 暂时性死区
- 全局作用域声明时,不属于顶层对象(window、global)的属性
常量声明
- 声明时即初始化(赋值)
- 块级作用域
- 基础类型无法修改,对象可以修改(数组也可以)
let在for循环中使用
- 每次循环会创建一个新的绑定
for...in 和 for...of
for...in用来遍历对象- 每次遍历key
for...of用来遍历数组- 每次遍历value
- 不可以直接遍历对象,结合Object.keys()遍历对象