1. let命令
块作用域,只在let命令所在的代码块有用。(for循环计数器很适合let命令)
注意:
- 不存在变量提升
- 暂时性死区(只要块级作用域内存在let命令,它所声明的变量就“绑定”这个区域,不再受外部的影响。在let声明之前都是死区)
- 不允许重复声明(let不允许在相同作用域内,重复声明同一个变量。)
2. 块作用域
es5没有块级作用域只有全局作用域和函数作用域,这会带来很多不合理的场景
- 第一种场景,内层变量可能会覆盖外层变量。
- 第二种场景,用来计数的循环变量泄露为全局变量。(循环结束后,定义的i值并没有消失)
3. ES6的块级作用域
es6允许块级作用域任意嵌套,每一层都是一个单独的作用域。
{{{{
{let insane = 'Hello World'}
console.log(insane); // 报错
}}}};
4. 块级作用域和函数声明
- ES6 引入了块级作用域,明确允许在块级作用域之中声明函数。
- ES6 的块级作用域必须有大括号
- 严格模式下(use strict),函数只能声明在当前作用域的顶层。
5. const命令
- const声明一个只读的常量。一旦声明,常量的值就不能改变。
- const的作用域与let命令相同:只在声明所在的块级作用域内有效。
- const命令声明的常量也是不提升,同样存在暂时性死区,只能在声明的位置后面使用
- const声明的常量,也与let一样不可重复声明。
6. ES6声明变量的6种方法
var命令,function命令,let命令,const命令,import命令,class命令
7. 顶层对象属性
顶层对象,在浏览器环境指的是window对象,在 Node 指的是global对象。
- es5中,顶层对象的属性与全局变量挂钩,顶层对象的属性与全局变量是等价的
window.a = 1;
a // 1
a = 2;
window.a // 2 顶层对象的属性赋值与全局变量的赋值,是同一件事。