let
- 块级作用域
- 暂时性死区
- 不存在变量提升
- 绑定作用域,不允许重复声明
for(){}
中是两个块级作用域,外面的包含里面的
块级作用域解决的问题
- 内部对外部的变量影响
- 变量泄露
块级作用域与函数
- ES5:
顶级作用域
、函数作用域
中才可以声明函数块级作用域
中不可以声明函数
- ES6:
块级作用域
中可以声明函数,但是相当于let
声明的块级变量- 在浏览器中特殊:
- 允许在块级作用域内声明函数。
- 函数声明类似于
var
,即会提升到全局作用域或函数作用域的头部。 - 同时,函数声明还会提升到所在的块级作用域的头部。
- 在浏览器中特殊:
顶层对象
- 浏览器:window
- node:global
- 统一:globalThis
const
- 声明常量,并且一旦声明不可以改变,并且需要立即初始化
- 不可以改变是指存储地址不可以改变,但是其对象本身是可以改变的
freeze
方法可以冻结