为什么这个 JavaScript 在使用分号时不被解释为代码块?

Why is this JavaScript not interpreted as a code block when semi-colon is used?

Chrome版本^72如果我运行以下JavaScript没有错误。

{ prop: p } = { prop: 'prop' }
>> { prop: 'prop' }

所以这行代码被解释为表达式语句,出乎意料。

但是如果我 运行 相同的代码在末尾有一个分号,它 运行 如预期的那样。

{ prop: p } = { prop: 'prop' };
>> Uncaught SyntaxError: Unexpected token =

这是预期的,因为最初的 { 告诉 JavaScript 引擎这是一个代码块,除非我们用括号消除歧义。

为什么有分号会出现这种情况,但没有分号就不会出现这种情况?

Why does this occur with the semi-colon but not without it?

Chrome 使用一个非常简单的测试来查看一行是否是对象文字:该行是否以 { 开头并以 } 结尾?如果是,则该行被评估为 expression.

{ prop: p } = { prop: 'prop' } 通过了该测试,但 { prop: p } = { prop: 'prop' }; 没有。


有关详细信息,请参阅 (不同的输入,相同的原因)。