1、let、const
相同点:
- 仅在其声明的块级作用域内有效;
- 不存在变量提升(变量在声明之前调用会报错);
- 存在暂时性死区(只要进入当前作用域,所要使用的变量就已存在,但不可获取,直到声明语句出现才可使用该变量);
- 不允许重复声明。
不同点:
- const 在声明时必须初始化,,且其指向的内存地址不可改变,但该内存地址指向的对象是可以改变的;如果向将对象冻结,可以使用Object.freeze()方法。
2、ES6块级作用域
- (1)外部无法获取内部定义的变量,但外部定义的变量如果在内部被改变了,外部也会受影响;
- (2)内部可以获取外部变量的值并修改;
- (3)内部可以定义与外部同名的变量。
(1)(3)
function f1() {
let n = 5;
if (true) {
let n = 10;
let a = 1;
console.log(n