函数
1.剩余参数(Rest parameters)
剩余参数会默认转为一个数组对象(可以不用类数组arguments了)。
使用如下:
console.log('containsAll:'+ containsAll('i like banana!',"banana", "b", "nan"));  // containsAll:true
function containsAll(haystack, ...needles){
    for(var needle of needles){
        if (haystack.indexOf(needle)=== -1){
            return false;
        }
    }
    return true;
}
- 只有位于最末的参数可被标记为剩余参数。
- 位于剩余参数之前的参数与普通参数的处理方式是一样的。
- 所有的额外参数都会被放入一个数组然后再分配给剩余参数。如果没有额外参数,剩余参数则为一个空数组;
- 剩余参数不能被赋值为undefined。
2.默认参数(Default parameters)
使用如下:
animalSentence();   //Lions and tigers and bears! Oh my!
animalSentence('cat', 'bear');    //Lions and cat and bear! Oh my!
function animalSentence(animals2="tigers", animals3="bears") {
    console.log(`Lions and ${animals2} and ${animals3}! Oh my!`);
}
- 取值undefined的作用等于是没有传入任何东西。因此,animalSentence(undefined, "unicorns") 返回的是 "Lions and tigers and unicorns! Oh my!"
- 没有显式定义的默认参数等同于undefined。function func(a=1,b)等价于function func(a=1,b=undefined)
3.箭头函数(Arrow functions)
可以省略function, return(某些情况下),括号和分号。
// ES5  
var total = values.reduce(function (a, b) {  
  return a + b;  
}, 0);  
// ES6  
var total = values.reduce((a, b) => a + b, 0); 
setTimeout(()=> {
    console.log(this.name);
}, 100);
箭头函数没有自己的this值,其this值是根据外层(函数或者全局)作用域来决定的。