var let 度可用于声明变量.
区别:1、let:只在let命令所在代码块内有效
2、let 不存在变量提升(内部影响不到外部)
var b = []; for(var j=0;j<10;j++){ let d=j; b[j]=function(){ console.log(d); }; } b[3]() //3
3、let 不允许在相同作用于重复声明
ES5只有全局作用域和函数作用域
ES6引入了块级作用域的概念 作用域块和块之间不受影响
const 也可以声明变量,但是声明的是常量,一旦声明,常量的值就不能改变。
其他和let基本一致
const 声明对象的属性是可以修改的,因为const保存的是对象的地址。
跨模块常量
export 导出
import 引入几种方式
import * as XXX from './xxx'; //使用方式console.log(XXX.输出的常量)
import {} from './xxx'; //引入变量
import xxx from 'xxxxx' ; //引入文件
ES6数组相关 数组解构
es6之扩展运算符 三个点(…)
var [a,b,c]=[1,2,3];
console.log(a,b,c)//1,2,3
let [head,...tail]=[1,2,3,4,5,6,7,8,9];
console.log(head) //1
console.log(tail);//[2,3,4,5,6,7,8,9]
es6新增Set,他类似数组,但是成员的值是唯一的,没有重复的,可以用于去重
对象解构类似
var {name,age}={name:'conan',age:28}
console.log(name); //conan
console.log(age);//28
var {name:cname,age:cage}={name:'conan',age:28}
console.log(cname); //conan
console.log(cage);//28 // 这样也是可以的
let object = { first: "Hello", last: "World" };
let { first: firstName, last: lastName} = object;
console.log(firstName); //Hello
console.log(lastName); //World
装饰器
装饰器(decorator)是一个函数,用来修改类的行为,ES2017引入这项功能,目前babel转码器已经支持
@testable class MyTestClass{ //.... } function testable(target){ target.isTestable = true; } //上面的代码中,@testable就是一个装饰器。他修改了MyTestableClass这个类的行为,为它就上了静态属性isTestable.
@decorator
class A(){}
等同于
class A(){}
A = decorator(A) || A
class MyReactComponent extends React.Component {} export default connect(mapStateToProps, mapDispatchToProps)(MyReactComponent); 有了装饰器,就可以改写上面的代码。 @connect(mapStateToProps, mapDispatchToProps) export default class MyReactComponent extends React.Component {}
装饰器只能用于类和类的方法,不能用于函数,因为存在函数提升