let和const
// 注意:下文指的声明变量一律指用let或const命令声明的变量
一. 不允许重复声明
- let和const声明的变量在同一作用域内不能重复声明
二. 不存在变量提升
三. 暂时性死区
- 只要在块级作用域存在let或const命令,它所声明的变量就绑定了这个快作用域,外部不会影响这个变量
- 由于不存在变量提升,因此在声明变量前使用该变量会报错
- 声明变量前使用该变量的多行代码称为该变量的死区,直到遇到声明结束死区
四. typeof
- 原本typeof可用于检测变量类型
- 但由于暂时性死区的存在,如果在声明变量前使用typeof会报错
- 但不声明变量使用typeof只会打印undefined
五. 函数
-
块级作用域内声明的函数类似于let
-
但在es6的浏览器有下面三条规则
- 块级作用域内可以声明函数
- 函数声明类似于var,即会提升到全局作用域或函数作用域的头部
- 同时,函数声明还会提升到所在的块级作用域的头部
-
块级作用域内可以声明函数,但不推荐,如果确实需要,应该写成函数表达式的形式
\