代码之家  ›  专栏  ›  技术社区  ›  J. Hesters

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

  •  1
  • J. Hesters  · 技术社区  · 7 年前

    我最近读到 this article 单元测试反应。

    在其中,作者使用如下语法:

    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上读过的书中,我从未见过这样的代码。我也从未在任何其他库或框架中使用过这种语法。但是,我测试了它,代码运行了,所有的测试都运行了。

    注意他也从来没有归还过任何东西。即使他用了关键词 async 他没有 await 什么都行。

    为什么这些分块对象是有效的JavaScript?它是如何工作的?这有一个明确的命名法吗?我看过MDN(和Google),但什么也没找到。

    1 回复  |  直到 7 年前
        1
  •  3
  •   Davi    7 年前

    你看到的叫做 compound statement .

    MDN

    推荐文章