let 和 const 命令

1.let用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。

es 阮一峰文档 es6阮一峰_es 阮一峰文档

设置循环变量的那部分是一个父作用域,而循环体内部是一个单独的子作用域。

es 阮一峰文档 es6阮一峰_块级作用域_02


2、var 与let声明不同

在使用var时,变量可以先使用后声明,输出值为undefined。

在使用let,变量必须先声明后使用

es 阮一峰文档 es6阮一峰_es 阮一峰文档_03


3、不允许重复声明

let不允许在相同作用域内,重复声明同一个变量。

es 阮一峰文档 es6阮一峰_块级作用域_04


因此,不能在函数内部重新声明参数。

es 阮一峰文档 es6阮一峰_作用域_05

2、const
基本用法:const声明一个只读的常量。一旦声明,常量的值就不能改变。这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值。

作用域

1、作用域:作用域就是一个独立的地盘,让变量不会外泄、暴露出去。

好处:作用域最大的用处就是隔离变量,不同作用域下同名变量不会有冲突。作用域是分层的,内层作用域可以访问外层作用域的变量,反之则不行

1、全局作用域包括:

1、最外层函数

2、最外层函数外面定义的变量

3、window对象

注意:块语句(大括号“{}”中间的语句),如 if 和 switch 条件语句或 for 和 while 循环语句,不像函数,它们不会创建一个新的作用域

es 阮一峰文档 es6阮一峰_块级作用域_06


2、函数作用域

函数作用域:声明在函数内部的变量,和全局作用域相反,局部作用域一般只在固定的代码片段内可访问到,最常见的例如函数内部。

3、块级作用域
块级作用域通过新增命令let和const声明,所声明的变量在指定块的作用域外无法被访问。
块级作用域在如下情况被创建:
1、在一个函数内部
2、在一个代码块(由一对花括号包裹)内部

暂时性死区

在存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。

es 阮一峰文档 es6阮一峰_es6_07

简而言之:在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。