Javascript 覆盖解构的 let 变量

Fab*_*ler -1 javascript destructuring

问题

是否可以覆盖分配的多个变量 let

const somefunction = (data) => ({a:1+data, b:2-data, c: 2*data, d: 3+1*data})

let {a, b, c, d} = somefunction(3)
Run Code Online (Sandbox Code Playgroud)

现在,在使用不同的参数调用 someFunction 之后,如何在一个语句中覆盖 {a, b, c, d} ?

可能的解决方案

不工作!(明显地)

const somefunction = (data) => ({a:1+data, b:2-data, c: 2*data, d: 3+1*data})

let {a, b, c, d} = somefunction(3)
{a, b, c, d} = somefunction(5)
Run Code Online (Sandbox Code Playgroud)

在职的

这似乎有效,但我更漂亮会删除前导分号(+ 语法很疯狂)

const somefunction = (data) => ({a:1+data, b:2-data, c: 2*data, d: 3+1*data})

let {a, b, c, d} = somefunction(3)
;({a, b, c, d} = somefunction(5))
Run Code Online (Sandbox Code Playgroud)

还有其他方法吗?

mpl*_*jan 5

您需要将 {} 包裹在 () 中,该箭头函数没有用于分组语句的括号:

const somefunction = data => ({a:1+data, b:2-data, c: 2*data, d: 3+1*data});

const {a,b,c,d} = somefunction(3)
console.log(a,b,c,d)
Run Code Online (Sandbox Code Playgroud)

或者使用 {} 并返回

const somefunction = data => {
  return {a:1+data, b:2-data, c: 2*data, d: 3+1*data}
};

const {a,b,c,d} = somefunction(3)
console.log(a,b,c,d)
Run Code Online (Sandbox Code Playgroud)

使用 let 覆盖:

const somefunction = data => ({a:1+data, b:2-data, c: 2*data, d: 3+1*data});

let {a,b,c,d} = somefunction(3);
console.log(a,b,c,d);

({a,b,c,d} = somefunction(5));

console.log(a,b,c,d);
Run Code Online (Sandbox Code Playgroud)

使用 var 覆盖(我不会;))

const somefunction = data => ({a:1+data, b:2-data, c: 2*data, d: 3+1*data});

var {a,b,c,d} = somefunction(3);
console.log(a,b,c,d);

var {a,b,c,d} = somefunction(5);

console.log(a,b,c,d);
Run Code Online (Sandbox Code Playgroud)