1.使用数组解构给函数参数传值,这样是按照顺序赋值的
> function f([x=1,y=2,z=3]=[]) {
... return [x,y,z]
... }
> let [x,y,z]=f()
> > x
1
> y
2
> z
3
> [x,y,z]=f([6])
[ 6, 2, 3 ]
> x
6
> y
2
> z
3
给x、y、z默认值时最好后面还给一个空数组,这样不给函数f传值时也不会报错
如果不给空空数组,直接调用函数f,不穿参数就会报错,如下:
> function f([x=1,y=2,z=3]) {
... return [x,y,z]
... }
undefined
> f()
TypeError: Cannot read property 'Symbol(Symbol.iterator)' of undefined
at f (repl:1:11)
2.使用对象传值
> function f({x=1,y=2,z=3}={}) {
... return {x,y,z}
... }
undefined
> f()
{ x: 1, y: 2, z: 3 }
> f({x:10})
{ x: 10, y: 2, z: 3 }
> f({y:20})
{ x: 1, y: 20, z: 3 }
使用对象时,是按照对象的key解构的而不是按照顺序。
但是最好也是给一个默认的空对象,不然不传值的时候就会报错
> function f({x=1,y=2,z=3}) {
... return {x,y,z}
... }
undefined
> f()
TypeError: Cannot destructure property `x` of 'undefined' or 'null'.
at f (repl:1:11)