let和const 命令
文章目录
1.let命令
1.1 let不存在变量提升
1.2暂时性死区
1.3"暂时性死区" 在typeof下不再百分百安全
1.4不允许重复声明
2.块级作用域
2.1 ES6块级作用域
2.2 块级作用域与函数声明 ☆重难(未理解)
3. const 命令
3.1 本质:
3.2 ES6 声明变量的六种方法
4. 顶层对象的属性
5. globalThis 对象
小结
1.let命令
let
类似var
;用于声明变量;但它声明的变量只在代码块里有效。
{
let a = 10;
var b = 1;
}
a // a is not defind
b // 1
for
循环的计数器;就很适合let
命令:
for (let i = 0; i < 10; i ++) {
//....
}
console.log(i);// i is not defind //因为已经出了块了
//如果用var 则可以正常输出1-10
1.1 let不存在变量提升
let
不存在变量提升;它必须先声明才可调用
1.2暂时性死区
var tmp = 123;
if (true) {
tmp = 'abb';
let tmp;
}
上述代码中,存在全局变量tmp
,但是块级作用域内let
又声明了一个局部变量tmp
,导致后者绑定这个块级作用域,所以在let
声明变量前,对tmp
赋值会报错。
if (true) {
// TDZ开始
tmp = 'abc'; // ReferenceError
console.log(tmp); // ReferenceError
let tmp; // TDZ结束 已经声明,后面可以赋值并调用了
console.log(tmp); // undefined
tmp = 123;
console.log(tmp); // 123
}
也就是说:let
命令声明变量之前,所有变量使用都会报错(还在“死区TDZ”中);必须先声明再赋值
1.3"暂时性死区" 在typeof
下不再百分百安全
typeof x; // ReferenError
let x;
因为let
无提升;此时用到x就会报错ReferenError
typeof b // undefind
作为比较,如果一个变量没被声明过完全不存在,用typeof
反而不报错;typeof
是百分百安全不报错的;这样的设计就是为了让大家养成良好的编程习惯;变量一定要先声明再调用。
1.4不允许重复声明
let
不允许在相同作用域内;变量名重名。
function fun()