概述
在ES6规范有一个词叫做Global Enviroment Records(全局环境变量记录)
,它里面包含两个内容,一个是Object Enviroment Record
,另一个是Declarative Enviroment Record
。
- 函数声明和使用var声明的变量会添加进入
Object Enviroment Record
中。 - 使用let声明和使用const声明的变量会添加入
Declarative Enviroment Record
中。
下面是ECMAscript规范中对var,let,const的一些约束:
- 使用var声明时,V8引擎只会检查
Declarative Enviroment Record
中是否有该变量,如果有,就会报错,否则将该变量添加入Object Enviroment Record
中。 - 使用let和const声明时,引擎会同时检查
Object Enviroment Record
和Declarative Enviroment Record
,如果有,则报错,否则将将变量添加入Declarative Enviroment Record
中。
这就解释了为什么使用var声明的变量可以重复声明,而是用let和const声明的变量不可以重复声明。
总结:大功告成✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️
参考链接: