一:ES6的概念
ES 的全称是 ECMAScript , 它是由 ECMA 国际标准化组织,制定的一项脚本语言的标准化规范。
ES6 既是一个历史名词,也是一个泛指,含义是 5.1 版以后的 JavaScript 的下一代标准,涵盖了 ES2015、ES2016、ES2017 等等,而 ES2015 则是正式名称,特指该年发布的正式版本的语言标准。
二:为什么使用ES6
每一次标准的诞生都意味着语言的完善,功能的加强。JavaScript语言本身也有一些令人不满意的地方
- 变量提升特性增加了程序运行时的不可预测性
- 语法过于松散,实现相同的功能,不同的人可能会写出不同的代码。
1.新增加let变量
1.1-let变量
在函数外声明的变量作用域是全局的:
示例
let声明的变量只在所处于的块级有效
<script> var b = 2;//全局变量 if(1==1){ let a = 1; console.log('块内a值是:',a);//1 console.log('块内b值是:',b);//2 } console.log('块内a值是:',a);//ReferenceError: a is not defined console.log('块内b值是:',b);//2 </script>
1.2-for循环需要let变量
示例1
for (var i = 1; i < 10.length; i++) { console.log(i); } console.log(i);//未定义
示例2
for (var i = 0; i < 3; i++) {//父作用域 let i = 'a';//子作用域 console.log(i); }
1.3-let不存在变量提升
var变量可以先使用再声明,在而是es6中变量必须要先声明变量,才可以使用。
示例
console.log(i);//报错 let i = 1; console.log(i);
1.4let暂时性死区
只要块级作用域内存在let命令,它所声明的变量就“绑定”这个区域,不再受外部的影响。
示例
//暂时性死区:用let声明的变量需要先声明后使用 var i = 1; if(true){ i = 2; let i = 3; }
1.5不允许重复声明
示例
let a=1; let a=3;//重复了,报错
let案例
let arr = []; for(let i=0;i<3;i++){ arr[i] = function(){ console.log(i); } } arr[0](); arr[1](); arr[2]();
总结
let 关键字用来声明块级变量。
特点就是在{}声明具有块级作用域,var变量无此特点。
防止循环变量编程全局变量。
let 关键词无变量提升。
let 关键词有暂时性死区的特点。{先声明后使用}