官术网_书友最值得收藏!

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的綁定,代碼如下:

主站蜘蛛池模板: 通化市| 罗源县| 曲阜市| 淮南市| 寻乌县| 红河县| 湟中县| 子洲县| 白河县| 台前县| 二连浩特市| 南阳市| 抚松县| 冕宁县| 光泽县| 罗定市| 晴隆县| 通许县| 皮山县| 万山特区| 修武县| 达拉特旗| 黑水县| 修水县| 合水县| 府谷县| 金坛市| 枣阳市| 崇文区| 嘉定区| 绿春县| 大姚县| 辽阳县| 芦溪县| 仁布县| 芷江| 济南市| 苍溪县| 大厂| 论坛| 岐山县|