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)
问题
是否可以覆盖用 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)