前言
接下来的文章中我们将学习ES6:
ECMAScript 6.0
( ES6
)是 JavaScript 语言的下一代标准。 ES6 主要是为了解决 ES5 的先天不足,比如 JavaScript 里并没有类的概念,但是目前浏览器的 JavaScript 是 ES5 版本,大多数高版本的浏览器也支持 ES6,不过只实现了 ES6 的部分特性和功能。
ECMAScript 和 JavaScript 的关系是,前者是后者的规格,后者是前者的一种实现。
let与const
在从前的JS中,我们都使用 var
来声明变量,在ES6中新增了两个JavaScript关键字:let
与 const
let
在使用 let
关键字时要注意:
- let定义变量没有变量提升
- 不能重复声明
- 在代码块内有效(块级作用域)
举个栗子:
<script>
// 1. let定义变量没有变量提升 var会变量提升
//console.log(a);
//let a = 10; //报错 Cannot access 'a' before initialization
console.log(b);
var b = 10; //undefined
// 2. 不能重复声明
// let c = 10;
// let c = 20;
// console.log(c); //报错 Identifier 'c' has already been declared
var c = 10;
var c = 20;
console.log(c); //20
// 3. 在代码块内有效(块级作用域)
for(let i = 0; i < 5; i++){
setTimeout(function () {
console.log(i); //0 1 2 3 4
},100)
}
for(var i = 0; i < 5; i++){
setTimeout(function () {
console.log(i); //5 5 5 5 5
},100)
}
</script>
解释一下上面的for循环:
- 在第一个for循环中,i 是用
let
声明的,且我们知道let
仅具有块级作用域,故当前的 i 仅在当前循环有效,每次循环的 i 都是一个新变量,所以setTimeout
定时器里面的 i 其实是不同的变量,故最后输出 0 1 2 3 4 。 - 在第二个for循环中,i 是用
var
声明的,而var
声明的变量是全局的,循环里的五个setTimeout
定时器是在循环结束后再执行的,此时的 i 都是5,故输出 5 5 5 5 5 。
const
- 定义常量
- 不能重复声明
- let 块级作用域
- 临时失效区
const
声明一个只读变量,声明后不许改变,故一旦声明必须初始化,否则会报错。
举个栗子:
<script>
// const PI;
// PI = 3.14159;
// console.log(PI); // 报错 Missing initializer in const declaration
const PI = 3.14159;
console.log(PI); // 3.15159
</script>
其实const保证的不是变量的值不变,而是保证变量指向的内存地址所保存的数据不允许改动,const保证的指针是不变的。
临(暂)时性死区
ES6 规定,代码块内如果存在 let 或者 const,代码块会对这些命令声明的变量从块的开始就形成一个封闭作用域,我们称为临(暂)时性死区。
var PI = 3.14;
if(true){
console.log(PI);
const PI = 3.14159; // 报错 ReferenceError: Cannot access 'PI' before initialization
}
如上,代码块内,在声明变量 PI 之前使用它会报错。
以上为本萌新个人总结,如有不当之处望指正,有问题可以联系
邮箱:yuna_03@163.com或
QQ:2635591841
更于2021.3.24