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 {}

装饰器只能用于类和类的方法,不能用于函数,因为存在函数提升

 

posted on 2019-03-30 12:35  执候  阅读(1493)  评论(0编辑  收藏  举报