为什么在函数中定义分块对象(因为缺少更好的术语)有效 JavaScript?

Why is defining chunked objects (for lack of a better term) in a function valid JavaScript?

我最近阅读了 this article 单元测试 React。

作者在其中使用了这样的语法:

describe('ClickCounter component', async assert => {
  const createCounter = clickCount =>
    render(<ClickCounter clicks={ clickCount } />)
  ;
  {
    const count = 3;
    const $ = createCounter(count);
    assert({
      given: 'a click count',
      should: 'render the correct number of clicks.',
      actual: parseInt($('.clicks-count').html().trim(), 10),
      expected: count
    });
  }
  {
    const count = 5;
    const $ = createCounter(count);
    assert({
      given: 'a click count',
      should: 'render the correct number of clicks.',
      actual: parseInt($('.clicks-count').html().trim(), 10),
      expected: count
    });
  }
});

我感到困惑的部分是以 assert 作为参数的回调函数的内容。

在其中,他只是将一个对象一个接一个地链接起来。他基本上是这样做的:

const myFunc = () => {
  {
    // object that confuses me, with promise (`assert`) which resolves
  }
  {
    // another object
  }
}

并且以某种方式执行了这些对象中的代码。我从未在 JavaScript 看过的任何课程或读过的书中看到过这样的代码。我也从未体验过在任何其他库或框架中使用过这种语法。但是,我测试了它并且代码有效,测试全部 运行.

请注意他也从不 returns 任何事情。即使他使用关键字 async 他也没有 await 任何东西。

为什么这些分块对象有效 JavaScript?它是如何工作的?对此有明确的命名法吗?我查看了 MDN(和 Google)但没有找到任何东西。

你看到的叫做compound statement

MDN