ES6 简介
ES 的全称是 ECMAScript , 它是由 ECMA 国际标准化组织,制定的一项脚本语言的标准化规范。
ES6 实际上是一个泛指,泛指 ES2015 及后续的版本。
每一次标准的诞生都意味着语言的完善,功能的加强。JavaScript语言本身也有一些令人不满意的地方。
- 变量提升特性增加了程序运行时的不可预测性
- 语法过于松散,实现相同的功能,不同的人可能会写出不同的代码
1.0 ES6 的新增语法
1.1 关键字 let
ES6中新增的用于声明变量的关键字-------let。(let声明的变量只在所处于的块级有效)
<script type="text/javascript">
/* --------let关键字就是用来声明变量的-------- */
let a = 10;
console.log(a);
/* --------使用let关键字声明的变量具有块级作用域-------- */
if (true) {
let b = 20;
console.log(b)
if (true) {
let c = 30;
}
console.log(c);
}
console.log(b)
/* -------在一个大括号中 使用let关键字声明的变量才具有块级作用域 var关键字是不具备这个特点的--------- */
if (true) {
let num = 100;
var abc = 200;
}
console.log(abc);
console.log(num)
/* -------防止循环变量变成全局变量--------- */
for (let i = 0; i < 2; i++) {
} // 在小括号中使用 let 声明的变量 也是与for 循环绑定 类似在中括号中。
console.log(i); // i = 2 因为只有 i = 2 时 这个才不成立
/*-----使用let关键字声明的变量没有变量提升------*/
console.log(a);
let a = 100; // 会报错
/* -------使用let关键字声明的变量具有暂时性死区特性------- */
var num = 10
if (true) {
console.log(num); // 这个跟上一个一样 报错, 因为这个 num是找的下一级, 在if中声明 let 与 if 绑定
let num = 20;
}
</script>
**注意:**使用let关键字声明的变量才具有块级作用域,使用var声明的变量不具备块级作用域特性。
1.1 关键字 变量 let–面试题
<script type="text/javascript">
// 这个题的关键点在于变量 i 是全局变量, 函数执行是输出的都是全局作用域下的值。
var arr = [];
for (var i = 0; i < 2; i++) {
// 如果用 var 声明 由于里面是函数, 无法自动执行, 所以会一直循环到 i 等于 2, 然后再去看下面的调用 所以两个结果都是 2
arr[i] = function() {
//
console.log(i);
}
}
arr[0](); // 2
arr[1](); // 2
// 此题的关键点在于每次循环都会产生一个块级作用域,每个块级作用域中的变量都是不同的。
// 函数执行时输出的是自己的上一级( 循环产生的块级作用域) 下的 i 值。
let arr = [];
for (let i = 0; i < 2; i++) {
arr[i] = function() {
console.log(i);
}
}
arr[0]();
arr[1]();
</script>
1.2 常量 const
作用:声明常量,常量就是值(内存地址)不能变化的量。
<script type="text/javascript">
1. 使用const关键字声明的常量具有块级作用域
// if (true) {
// const a = 10;
// if (true) {
// const a = 20;
// console.log(a);
// }
// console.log(a);
// }
// console.log(a);
2. 使用const关键字声明的常量必须赋初始值
// const PI = 3.14;
3. 常量声明后值不可更改
const