You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么对象解构重新赋值时需要用括号包裹赋值语句?

报错原因

JavaScript解析器有固定的语法优先级规则:当行首以{开头时,会默认将这段内容识别为代码块(block statement),而非对象解构的语法标识。
你没有加括号的写法里:

let item_one, item_two;
{ item_one, item_two } = testFunction()

第二行的{被解析成了代码块的开头,代码块内部不允许直接出现=赋值操作,因此运行到=时就会抛出「Unexpected token "="」的语法错误。

加括号的作用

圆括号()的核心作用是强制语法解析规则:被圆括号包裹的内容会被JS解析器识别为表达式(expression),而非独立的代码块语句。
你套了括号之后:

let item_one, item_two;
({ item_one, item_two } = testFunction())

解析器不会再把开头的{当成代码块的起始,而是正确识别为对象解构赋值的模式,因此可以正常完成对已声明变量的重新赋值。

额外说明:这种规则冲突只会出现在「解构赋值左侧没有let/const/var等声明关键字、且{处于行首」的场景。如果解构前带了声明关键字,解析器会自动识别为解构语法,不会触发代码块的解析逻辑,所以let { item_one, item_two } = testFunction()的写法是合法的,只是不满足你复用已声明变量的需求。

内容的提问来源于stack exchange,提问作者Igor Moraru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 09:15:02