1. 什么是 ES6
ES 全称 ECMAScript,它是由 ECMA 国际化标准组织制定的一项脚本语言的标准化规范。
2. 为什么使用 ES6
每一次新标准的诞生,都意味着语言的完善、功能的加强。JavaScript 语言本身有一些令人不满意的地方:
- 变量提升特性增加了程序运行时的不可预测性。
- 语法过于松散,实现相同的功能,不同的人可能会写出不同的代码。
3. ES6 新增语法
3.1 let
ES6 中新增了用于声明变量的关键字
3.1.1 let 声明的变量只在所处的块级有效
if (true) {
let a = 10;
}
console.log(a); // a is not defined
注意:使用 let 声明的变量才具有块级作用域,使用 var 声明的变量不具有块级作用域。
3.1.2 不存在变量提升
console.log(a); // a is not defined
let a = 10;
3.1.3 暂时性死区
利用 let 声明的变量会暂时绑定在这个块级作用域,不会受外界影响
var temp = 123;
if (true) {
temp = "abc"; // Cannot access 'temp' before initialization
let temp;
}
3.1.4 经典面试题
var arr = [];
for (var i = 0; i < 2; i++) {
arr[i] = function () {
console.log(i);
}
}
arr[0]();
arr[1]();
结果:
2
2
let arr = [];
for (let i = 0; i < 2; i++) {
arr[i] = function () {
console.log(i);
}
}
arr[0]();
arr[1]();
结果:
0
1
3.1.5 小结
- let 就是用来声明变量的
- 使用 let 声明的变量具有块级作用域
- 在一个打括号中使用 let 声明的变量才具有块级作用域,var 声明的变量不具有此特点
- 使用 let 声明可以防止循环变量成为全局变量
- 使用 let 关键字声明的变量不能进行变量提升
- 使用 let 声明的变量具有暂时性死区的特性
3.2 const
声明常量,常量的内存地址不能改变。
3.2.1 具有块级作用域
if (true) {
const a = 10;
}
console.log(a); // a is not defined
3.2.2 声明常量时必须赋值
const PI; // const variable without initializer is not allowed