Javascript 覆盖解构的 let 变量

Javascript overwrite destructured let variable

问题

是否可以覆盖用 let

赋值的多个变量
const somefunction = (data) => ({a:1+data, b:2-data, c: 2*data, d: 3+1*data})

let {a, b, c, d} = somefunction(3)

现在,如何在使用不同参数调用 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)

工作

这似乎可行,但我的 prettier 会删除前导分号(+语法很疯狂)

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))

还有其他方法吗?

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

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)

或使用{}和return

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)

使用 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);

使用 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);

很难看,但是你可以用var代替let

const somefunction = (data) => {return {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(4)

console.log(a,b,c,d)