01_let 和 const 命令
不存在变量提升
存在暂时性死区
- typeof 不再是安全的操作符
- 有些死区比较隐蔽
- 本质
不允许重复声明
块级作用域
- 为什么需要块级作用域
变量外泄内层变量可能会覆盖外层变量- 循环内部的变量变为全局
- 块级作用域中可以声明函数吗
- 不行 但是浏览器没有遵守 (ES5 规定,函数只能在顶层作用域和函数作用域之中声明,不能在块级作用域声明)
- es6 之后可以
- 使得 IIFE 没有必要了
- 为什么需要块级作用域
const
- 和 let 一样 不存在变量提升 存在暂时性死区
- 声明之后的变量不能改变 内存地址不能改变
- 指向的地址空间
- 不允许重复声明
- 拓展: 冻结对象中的所有对象 使得不能被更改 使用 Object.freeze 方法
ES6 声明变量的六种方法
- var let const class import function
window 对象顶层对象的属性- 在浏览器环境中 var 声明的变量会自动挂在到 window 上
- let 、 const 、class 不会, var 和 function 会
- 每个环境的顶层对象可能是不同的 不一定都是 window
- 为了解决这个问题 es2020 新的提案 globalThis