- React工程師修煉指南
- 開課吧組編 高少云 莫濤 韓明洋 余維海編著
- 924字
- 2021-04-14 11:28:40
1.5 函數
1.5.1 函數形參的默認值
很多情況下,需要在使用函數的時候給定默認參數,在ES5標準中一般會這樣來做:

通過上面的代碼可以解決多數情況下的需求,但是如果遇到“age”參數是0的情況,會發現“age”的值會變成默認值20,不符合預期,所以可以通過typeof來對代碼做改進:

上述寫法可以解決參數默認值的問題,但是寫法上比較煩瑣。針對這種情況,ES6標準中提供參數默認值來簡化上述過程,代碼如下:

上述代碼中,如果有參數傳入,形參的值是傳入的參數,如果沒有參數傳入,形參的值會是默認參數。在使用過程中有時候會出現第一個參數需要默認參數,第二個及后面的參數需要傳入的情況。第一個參數可以傳入undefined。代碼如下:

1.5.2 函數形參不定參數
在很多情況下,使用函數傳參的時候,形參的數量是不固定的,這時候要獲取參數值就會比較麻煩。在ES5標準中可以通過隱藏參數arguments來獲取,此時會把所有參數放在arguments里。代碼如下:

上述寫法在ES6中提供rest剩余參數來處理不定參問題,可以通過“...”來表示:

在使用剩余參數的時候需要注意,每個函數只能聲明一個剩余參數,且剩余參數必須在參數的末尾。那么在使用剩余參數的時候會對arguments隱藏參數產生影響嗎?代碼如下:

通過上述執行結果可以看出剩余參數對arguments是沒有影響的。
1.5.3 箭頭函數
在ES5標準中定義返還函數可以通過下列方式來實現:

在ES6標準中將上述寫法通過箭頭語法變得更加簡單,代碼如下:

箭頭語法最大的特點是有箭頭“=>”符號,當然箭頭語法有很多變式寫法。代碼如下:


同樣也可以手動返還數據,例如:

利用箭頭語法里隱式返還的時候需要注意對象的情況,需要注意如下錯誤情況:

上面代碼初步感覺是返還了一個對象,但是這里的大括號和函數里的大括號在含義上有沖突,系統會認為大括號是函數里的括號,而不是對象里的括號,導致報錯。所以需要改成如下寫法:

箭頭函數中還有個位置需要特別注意,就是箭頭函數里沒有this綁定,如下代碼,this指向對象本身:

上面代碼可以打印出id為2,this指向了obj,所以this.id可以取到obj.id。如果改成箭頭語法會發現,函數中this指向改變了,代碼如下:


這里會發現this.id獲取不到值,原因是箭頭函數沒有this綁定,箭頭函數中的this會指向最近的上層this,所以這里this的指向是Window,所以最終取不到this.id。同樣在使用箭頭語法的時候需要注意沒有隱藏參數arguments的綁定,代碼如下:
