题目

const value = {number: 10};
const multiply = (x = {...value}) => {
    console.log(x.number *= 2);
};

multiply();
multiply();
multiply(value);
multiply(value);

答案

20 20 20 40

解析

1、第一次调用的时候,是默认参数,默认值是使用了先解构再赋值的方式生成的一个新对象,所以对value没有影响,输出20
2、同一
3、第三次调用,把value作为参数传进去,直接修改 value 对象中 number 属性的值,执行完之后,value变成了{number:20};
4、第四次调用,此时value={number:20};输出为40

拓展

如果将题目改写一下,把{...value}换成 value

const value = {number: 10};
const multiply = (x = value) => {
    console.log(x.number *= 2);
};

multiply();
multiply();
multiply(value);
multiply(value);

这样修改以后,因为每一次都是在修改value对象下number属性的值,所以修改后的代码打印为20 40 80 160