1.Es6介绍 
2.let和const 
let/const:
- 无变量提升
 - 有作用域
 - 不能重复声明
 
const:不变量
javascript
//变量提升:
console.log(a) // undefined
var a=3
//变量提升的问题1:
var arr=[]
for(var i =0;i<10;i++){
  arr[i]=function(){
    return i
  }
}
console.log(arr[5]) // 10 不是5 因为i++ 到10了
//let不会污染全局变量,var会:
console.log(windows.RegExp) // 返回是个函数
let RegExp = 10
console.log(RegExp) //103.模版字符串 
javascript
let id = 6
let htmlString = `<div>my id is ${id}</div>`
console.log(htmlString) // my id is 64. 函数之默认值、剩余参数 
默认值:解决了es5 ,函数传参时默认值的问题
javascript
//Es5写法
  function foo(a, b) {
        a = a || 10  //a默认值为10,b为5
        b = b || 5
        return a + b
    }
    console.log(foo()) //15
//Es6写法
function foo(a = 10, b = 5) {
        return a + b
    }
    console.log(foo()) //15剩余参数:解决了es5的arguments的问题
javascript
//写个函数pick出对象中想要的属性和值
// Es5写法
var book = {
        'name': 'Happy',
        'author': 'Dahong',
        'year': 2009
    }
    function pick(obj) {
        var result = Object.create(null)
        for (var i = 1; i < arguments.length; i++) {
            result[arguments[i]] = obj[arguments[i]]
        }
        return result
    }
    console.log(pick(book, 'name', 'year')) //{name: 'Happy', year: 2009}
//Es6写法
let book = {
        'name': 'Happy',
        'author': 'Dahong',
        'year': 2009
    }
    
    function pick(obj, ...keys) {
        let result = Object.create(null)
        for (let i = 0; i < keys.length; i++) {
            console.log(keys[i])
            result[keys[i]] = obj[keys[i]]
        }
        return result
    }
    
    console.log(pick(book, 'name', 'year'))   //{name: 'Happy', year: 2009}