gpt4 book ai didi

javascript - 我们可以设置持久的默认参数,在明确更改之前保持设置吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:41:45 25 4
gpt4 key购买 nike

下面是一个函数fn,其中abc 的预期结果定义在fn 的每次调用,无论是否传递对象参数。如果传递设置属性的对象,则应仅为该对象设置属性。

const fn = (opts = {a:1, b:2, c:3}) => console.log(opts);

不带参数调用结果为

fn() // {a: 1, b: 2, c: 3}

当带参数调用时,例如{b:7},预期结果为

fn({b:7}) // {a: 1, b: 7, c: 3}

然而,实际结果却是

fn({b:7}) // {b: 7}

能够通过在函数外部定义对象并在函数主体内使用 Object.assign() 来获得预期结果

const settings = {a: 1, b: 2, c: 3};
const fn = opts => {opts = Object.assign({}, settings, opts); console.log(opts)}
fn({b: 7}) // {a: 1, b: 7, c: 3}
fn(); // {a: 1, b: 2, c: 3}
/*
// does not log error; does not return expected result
const fn = (opts = Object.assign({}, settings, opts)) => console.log(opts)

*/

是否可以仅使用默认参数来实现上述结果,而无需在函数参数外部或函数体内定义一个对象来引用?

最佳答案

也许我误解了这个问题,但您似乎正在为每个单独的属性寻找默认初始化程序。为此,您必须使用解构:

const fn = ({a = 1, b = 2, c = 3} = {}) => console.log({a, b, c});

如果您想保留任意属性,而不仅仅是那些您预先知道的属性,您可能会对 object rest/spread properties proposal 感兴趣可以让你写

const fn = ({a = 1, b = 2, c = 3, ...opts} = {}) => console.log({a, b, c, ...opts});

Can an opts variable as the single object reference be achieved solely utilizing default parameters, without defining an object to reference outside of function parameters or within function body?

没有。参数声明只能使用(部分)参数初始化变量,并且可能(作为语法糖)在没有或 undefined 参数(部分)被传递时使用默认值。它们无法执行无条件计算并创建从结果初始化的变量 - 这正是您在此处尝试实现的目标。

你应该为此使用函数体。

关于javascript - 我们可以设置持久的默认参数,在明确更改之前保持设置吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43466657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com