函數(shù)有兩種表示方法,一種是函數(shù)聲明台腥,一種是函數(shù)表達式宏赘。
箭頭函數(shù)就是ES6提供一種簡寫的函數(shù)表達式。
一般我們寫函數(shù)表達式是醬嬸兒的:
var a=function(a,b){return a-b;}
然后用了箭頭函數(shù)是醬嬸兒的:
var a=(a,b)=>a-b;
箭頭函數(shù)的規(guī)則:
1.如果箭頭函數(shù)不需要參數(shù)或需要多個參數(shù)黎侈,就使用一個圓括號代表參數(shù)部分察署。
2.如果箭頭函數(shù)的代碼塊部分多于一條語句,就要使用大括號將它們括起來蜓竹,并且使用return語句返回箕母。
3.由于大括號被解釋為代碼塊,所以如果箭頭函數(shù)直接返回一個對象俱济,必須在對象外面加上括號嘶是,否則會報錯。
4.
使用注意點:
(1)函數(shù)體內(nèi)的this對象蛛碌,就是定義時所在的對象聂喇,而不是使用時所在的對象。
this對象的指向是可變的,但是在箭頭函數(shù)中希太,它是固定的克饶。
```
functionfoo(){setTimeout(()=>{console.log('id:',this.id);},100);}
var id=21;
foo.call({id:42});// id: 42
```
(2)不可以當作構(gòu)造函數(shù),也就是說誊辉,不可以使用new命令矾湃,否則會拋出一個錯誤。
(3)不可以使用arguments對象堕澄,該對象在函數(shù)體內(nèi)不存在邀跃。如果要用,可以用 rest 參數(shù)代替蛙紫。
(4)不可以使用yield命令拍屑,因此箭頭函數(shù)不能用作 Generator 函數(shù)。
在ES6教程中有一個Pipeline的例子有點難理解坑傅,在這里翻譯下:
```
const pipeline=(...funcs)=>
?? val=>funcs.reduce((a,b)=>b(a),val);
const plus1=a=>a+1;
const mult2=a=>a*2;
const addThenMult=pipeline(plus1,mult2);
addThenMult(5)// 12
```
pipeline的參數(shù)是一個數(shù)組的擴展僵驰,即將數(shù)組的每一個元素傳入。pipeline返回了一個參數(shù)為val的函數(shù)f1唁毒,f1的具體內(nèi)容是將傳入數(shù)組的元素按照reduce操作執(zhí)行蒜茴,reduce的操作函數(shù)f2傳入?yún)?shù)一個是將a的輸出作為b的輸入,另一個是初始值val浆西。