函數(shù)有兩種表示方法,一種是函數(shù)聲明,一種是函數(shù)表達(dá)式。
箭頭函數(shù)就是ES6提供一種簡(jiǎn)寫的函數(shù)表達(dá)式。
一般我們寫函數(shù)表達(dá)式是醬嬸兒的:
var a=function(a,b){return a-b;}
然后用了箭頭函數(shù)是醬嬸兒的:
var a=(a,b)=>a-b;
箭頭函數(shù)的規(guī)則:
1.如果箭頭函數(shù)不需要參數(shù)或需要多個(gè)參數(shù),就使用一個(gè)圓括號(hào)代表參數(shù)部分。
2.如果箭頭函數(shù)的代碼塊部分多于一條語(yǔ)句,就要使用大括號(hào)將它們括起來,并且使用return語(yǔ)句返回。
3.由于大括號(hào)被解釋為代碼塊,所以如果箭頭函數(shù)直接返回一個(gè)對(duì)象,必須在對(duì)象外面加上括號(hào),否則會(huì)報(bào)錯(cuò)。
4.
使用注意點(diǎn):
(1)函數(shù)體內(nèi)的this對(duì)象,就是定義時(shí)所在的對(duì)象,而不是使用時(shí)所在的對(duì)象。
this對(duì)象的指向是可變的,但是在箭頭函數(shù)中,它是固定的。
```
functionfoo(){setTimeout(()=>{console.log('id:',this.id);},100);}
var id=21;
foo.call({id:42});// id: 42
```
(2)不可以當(dāng)作構(gòu)造函數(shù),也就是說,不可以使用new命令,否則會(huì)拋出一個(gè)錯(cuò)誤。
(3)不可以使用arguments對(duì)象,該對(duì)象在函數(shù)體內(nèi)不存在。如果要用,可以用 rest 參數(shù)代替。
(4)不可以使用yield命令,因此箭頭函數(shù)不能用作 Generator 函數(shù)。
在ES6教程中有一個(gè)Pipeline的例子有點(diǎn)難理解,在這里翻譯下:
```
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ù)是一個(gè)數(shù)組的擴(kuò)展,即將數(shù)組的每一個(gè)元素傳入。pipeline返回了一個(gè)參數(shù)為val的函數(shù)f1,f1的具體內(nèi)容是將傳入數(shù)組的元素按照reduce操作執(zhí)行,reduce的操作函數(shù)f2傳入?yún)?shù)一個(gè)是將a的輸出作為b的輸入,另一個(gè)是初始值val。