ES6中如何对已定义的let变量进行解构赋值?
无需重新声明的解构赋值方案
嘿,这个问题我太懂了!当初从ES5转ES6的时候,我也超级沉迷对象解构,碰到这个场景时一开始也卡了一下——不过放心,完全有办法用let实现对已声明变量的解构更新。
你之前的写法{a, b} = await otherFunction(a, b)会报错,原因是JavaScript引擎会把以{开头的代码识别成代码块语句,而不是解构赋值表达式。解决方法很简单,只需要把整个解构赋值语句用一对圆括号()包裹起来就行:
function someFunction() { return Promise.resolve({ a: 0, b: 1 }); } function otherFunction(a, b) { return Promise.resolve({ a: a + 1, b: b + 2 }); } let {a, b} = await someFunction(); // 用括号包裹,告诉引擎这是一个表达式而非代码块 ({a, b} = await otherFunction(a, b)); console.log(a, b); // 输出 1 3
这个括号的作用就是明确告诉JavaScript:“这不是代码块,是一个赋值表达式”,这样就能顺利完成对已用let声明的变量a和b的解构更新了,完全符合ES6的严格规范,不用退而求其次用var。
再举个更基础的同步场景例子帮你理解:
let x, y; // 同样需要括号包裹 ({x, y} = {x: 10, y: 20}); console.log(x, y); // 输出 10 20
内容的提问来源于stack exchange,提问作者Mouradif
相关产品推荐
相关产品推荐

