>[success] # 举个案例(阮一峰老师的例子) ~~~ 1.代码中,函数move的参数是一个对象,通过对这个对象进行解构, 得到变量x和y的值。如果解构失败,x和y等于默认值 2.这里的赋值是给函数参数等号右面赋值,也就是说下面情况依次是: {x = 0, y = 0} = {x: 3, y: 8} {x = 0, y = 0} = {x: 3} {x = 0, y = 0} = {} {x = 0, y = 0} = undefined 根据解构赋值默认参数赋值所以出现下面的打印效果 ~~~ * 当作为函数参数时候其实传入参数为其右侧,例如下面案例中的**move({x: 3, y: 8})**实际转换应该为 **function move({x = 0, y = 0} = {x: 3, y: 8})** ~~~ 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] ~~~ ~~~ 1.为函数move的参数指定默认值,而不是为变量x和y指定默认值, 所以会得到与前一种写法不同的结果 2.跟上面第二条同理 ~~~ ~~~ 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] ~~~