函數參數的默認值與解構賦值的默認值

參數默認值可以與解構賦值的默認值,結合起來使用。

function foo({x, y = 5}) { //這裏定義了一個函數,參數爲一個{}對象,沒有默認值,只有解構賦值參數的默認值
  console.log(x, y);
}

foo({}) // undefined 5
foo({x: 1}) // 1 5
foo({x: 1, y: 2}) // 1 2
foo() // TypeError: Cannot read property 'x' of undefined

上面代碼只使用了對象的解構賦值默認值,沒有使用函數參數的默認值。只有當函數foo的參數是一個對象時,變量xy纔會通過解構賦值生成。如果函數foo調用時沒提供參數,變量xy就不會生成,從而報錯。因此定義函數時,當與解構賦值結合使用時,參數默認值可以不設置,但是這時候調用函數時就必須要傳值,否則會報錯,因此只有進行了結構賦值這一步纔會去定義x和y

通過提供函數參數的默認值,就可以避免這種情況,如下:

function foo({x, y = 5}={}) {
  console.log(x, y);
}

上面這個函數的情況是:

1 如果調用foo時沒傳參數,則默認是{},將{}值對左邊進行解構賦值,因爲y有默認值,則結果爲x:undefined,y:5

2 比如傳了值爲{x:10,y:20},那麼就使用這個對象對左邊進行解構賦值,匹配到了x和y,所以最終結果x=10,y=20;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章