前言
ES6對函數(shù)進(jìn)行了擴(kuò)展,常用的大致有一下幾個方面
1、ES6允許為函數(shù)的參數(shù)設(shè)置默認(rèn)值;
2、引入了rest參數(shù)
3、函數(shù)中 擴(kuò)展運(yùn)算符的使用 '' ... ''
4、箭頭函數(shù)
1、ES6允許為函數(shù)的參數(shù)設(shè)置默認(rèn)值;
早前,如果想給函數(shù)的參數(shù)指定默認(rèn)值,一般使用短路表達(dá)式來實現(xiàn)。
//es5
function foo(x,y){
x=x|| 'www';
y=y||'qqq';
console.log(x,y)
}
而在es6中允許為函數(shù)的參數(shù)設(shè)置默認(rèn)值,直接寫在參數(shù)定義的 后面即可
//es6
function foo(x='www',y='qqq'){
console.log(x,y)
}
這樣的寫法,既簡潔,又能夠很容易區(qū)分哪些參數(shù)可以省略,但需要注意的是 設(shè)置的默認(rèn)值的參數(shù),在函數(shù)內(nèi)部是不能再次用 let const 聲明的。
function foo(x='www',y='qqq'){
let x='sss' //error
let y='ppp' //error
}
*函數(shù)參數(shù)默認(rèn)值和對象解構(gòu)賦值結(jié)合使用
function fetch(url,{body='',method='get',header={}}){
console.log(method)
}
fetch('http://xxx.xxx.xx',{}) //get
上面的函數(shù)設(shè)置了對象解構(gòu)賦值的默認(rèn)值,當(dāng)函數(shù)第二個參數(shù)是 對象的時候,可以為對象的3個屬性設(shè)置默認(rèn)值,但這種寫法不能省略第二個參數(shù),省略了就會報錯
fetch('http://xxx.xxx.xx') //報錯
結(jié)合函數(shù)默認(rèn)值 可以解決這個隱患
function fetch(url,{body='',method='get',header={}} = {} ){
console.log(method)
}
fetch('http://xxx.xxx.xx',{}) //get
2、引入了rest參數(shù) function foo(...變量名){}
rest 函數(shù)用于獲取函數(shù)的多余參數(shù),并且把這些參數(shù)轉(zhuǎn)成一個數(shù)組
結(jié)合 rest 參數(shù) 寫一個求和函數(shù)
function add(...values){
let sum=0;
for(var i of values){
sum+=val
}
return sum;
}
add(1,2,3,4)// 10
* rest 參數(shù)是 函數(shù)參數(shù)中最后一個參數(shù) 之后不能再加參數(shù)
function foo(a,...b,c){} //報錯
*函數(shù)的length屬性不包括rest參數(shù)
*rest 參數(shù)中的變量代表一個數(shù)組,數(shù)組的操作方法 都可以用于這個變量。
3、函數(shù)中 擴(kuò)展運(yùn)算符的使用 '' ... ''
擴(kuò)展運(yùn)算符 好比rest參數(shù)的逆運(yùn)算,將一個數(shù)組轉(zhuǎn)為用都好分割的參數(shù)序列.
主要用在函數(shù)調(diào)用中,
function push(arr,...items){
arr.push(...items)
}
fucntion add(x,y){
return x+y
}
var arr=[1,2];
add(...arr) //3
擴(kuò)展運(yùn)算符的應(yīng)用
1·合并數(shù)組
ES5
[1,2].concat(more)
ES6
[1,2,...more]
2·與解構(gòu)賦值結(jié)合
//ES5
a=list[0],b=list.slice(1)
//ES6
[a,...b]=list
3·任何類似數(shù)組的對象都都可以通過擴(kuò)展運(yùn)算符轉(zhuǎn)為真正的數(shù)組。
var arr=[...nn]
等同于
Array.from()
4、箭頭函數(shù)
ES6允許使用箭頭 =>定義函數(shù)
var f= v=> v;
如果箭頭函數(shù)的代碼塊部分為一條語句 ,則可以省略return
等同于
var f= v=> {return v}
等同與
var f=function(v){return v;}
如果函數(shù)沒有參數(shù) 或者有多個參數(shù),就使用圓括號代表參數(shù)部分
var f= ()=> s;
var f= (num1,num2)=> num1+num2;
如果箭頭函數(shù)的代碼塊部分多于一條語句,就用大括號 擴(kuò)起來,并使用return 語句。
var f= (num1,num2)=>{return num1+num2;}
由于大括號被解釋為代碼塊,如果箭頭函數(shù)直接返回一個對象 則必須在對象外面加上括號
var f= id =>({id:id,name:'aaa'})
var f= id =>{ return{id:id,name:'aaa'}}
箭頭函數(shù)可以與變量解構(gòu)結(jié)合使用
const full= ({first,last})=>first+' '+last;
等同于
function full(params){
return params.first+' '+params.last
**注意:
箭頭函數(shù)體內(nèi)的this 對象 就是定義時所在的對象,而不是使用時所在的對象,即this固定指向定義時所在的函數(shù),是不可變的
}