- 函數的參數也可以使用解構賦值。
function add([x, y]){ return x + y; } add([1, 2]); // 3
上面代碼中,函數
add
的參數表面上是一個數組,但在傳入參數的那一刻,數組參數就被解構成變量x
和y
。對於函數內部的代碼來說,它們能感受到的參數就是x
和y
。 -
[[1, 2], [3, 4]].map(([a, b]) => a + b);
默認值
-
function move({x = 0, y = 0} = {}) { return [x, y]; } move({x: 3, y: 8}); // [3, 8] move({x: 3}); // [3, 0] move({}); // [0, 0] move(); // [0, 0]
上面代碼中,函數
move
的參數是一個對象,通過對這個對象進行解構,得到變量x
和y
的值。如果解構失敗,x
和y
等於默認值。 -
function move({x, y} = { x: 0, y: 0 }) { return [x, y]; } move({x: 3, y: 8}); // [3, 8] move({x: 3}); // [3, undefined] move({}); // [undefined, undefined]?????? move(); // [0, 0]??????
上面代碼是為函數
move
的參數指定默認值,而不是為變量x
和y
指定默認值,所以會得到與前一種寫法不同的結果。 -
[1, undefined, 3].map((x = 'yes') => x); // [ 1, 'yes', 3 ]
undefined
就會觸發函數參數的默認值。