ES6新增语法
每一次标准的诞生都意味着语言的完善,功能的加强。JavaScript语言本身也有一些令人不满意的地方。
-
变量提升特性增加了程序运行时的不可预测性
-
语法过于松散,实现相同的功能,不同的人可能会写出不同的代码
1 if (true) { 2 let a = 10; 3 } 4 console.log(a) // a is not defined
2、不存在变量提升
1 console.log(a); // a is not defined 2 let a = 20;
1 var tmp = 123; 2 if (true) { 3 tmp = 'abc'; 4 let tmp; 5 }
小结
-
let关键字就是用来声明变量的
-
使用let关键字声明的变量具有块级作用域
-
在一个大括号中 使用let关键字声明的变量才具有块级作用域 var关键字是不具备这个特点的
-
防止循环变量变成全局变量
-
使用let关键字声明的变量没有变量提升
-
使用let关键字声明的变量具有暂时性死区特性
1 if (true) { 2 const a = 10; 3 } 4 console.log(a) // a is not defined
1 const PI = 3.14; 2 PI = 100; // Assignment to constant variable. 3 4 const ary = [100, 200]; 5 ary[0] = 'a'; 6 ary[1] = 'b'; 7 console.log(ary); // ['a', 'b']; 8 ary = ['a', 'b']; // Assignment to constant variable.
-
-
既然是常量不能重新进行赋值,如果是基本数据类型,不能更改值,如果是复杂数据类型,不能更改地址值
-
声明 const时候必须要给定值
-
-
使用 let 声明的变量,其作用域为该语句所在的代码块内,不存在变量提升
-
使用 const 声明的是常量,在后面出现的代码中不能再修改该常量的值
1 let [a, b, c] = [1, 2, 3]; 2 console.log(a)//1 3 console.log(b)//2 4 console.log(c)//3 5 //如果解构不成功,变量的值为undefined
1 let person = { name: 'zhangsan', age: 20 }; 2 let { name, age } = person; 3 console.log(name); // 'zhangsan' 4 console.log(age); // 20 5 6 let {name: myName, age: myAge} = person; // myName myAge 属于别名 7 console.log(myName); // 'zhangsan' 8 console.log(myAge); // 20
小结
-
解构赋值就是把数据结构分解,然后给变量进行赋值
-
如果结构不成功,变量跟数值个数不匹配的时候,变量的值为undefined
-
数组解构用中括号包裹,多个变量用逗号隔开,对象解构用花括号包裹,多个变量用逗号隔开
-
利用解构赋值能够让我们方便的去取对象中的属性跟方法
1 () => {} //():代表是函数; =>:必须要的符号,指向哪一个代码块;{}:函数体
函数体中只有一句代码,且代码的执行结果就是返回值,可以省略大括号
1 function sum(num1, num2) { 2 return num1 + num2; 3 } 4 //es6写法 5 const sum = (num1, num2) => num1 + num2;
如果形参只有一个,可以省略小括号
1 function fn (v) { 2 return v; 3 } 4 //es6写法 5 const fn = v => v;
箭头函数不绑定this关键字,箭头函数中的this,指向的是函数定义位置的上下文this
1 const obj = { name: '张三'} 2 function fn () { 3 console.log(this);//this 指向 是obj对象 4 return () => { 5 console.log(this);//this 指向 的是箭头函数定义的位置,那么这个箭头函数定义在fn里面,而这个fn指向是的obj对象,所以这个this也指向是obj对象 6 } 7 } 8 const resFn = fn.call(obj); 9 resFn();
-
-
箭头函数的优点在于解决了this执行环境所造成的一些问题。比如:解决了匿名函数this指向的问题(匿名函数的执行环境具有全局性),包括setTimeout和setInterval中使用this所造成的问题