Возвращаемое значение в нефункциональном блоке кода Javascript - PullRequest
1 голос
/ 26 апреля 2019

Я пытаюсь понять, что происходит на примере Box Mlot Бостока Майка из галереи D3.Вот код внутри записной книжки Observable: https://observablehq.com/@d3/box-plot

В нем есть блок кода, который не является определением функции, но имеет возвращаемое значение:

chart = {
    const svg = d3.select(DOM.svg(width, height));

    const g = svg.append("g")
        .selectAll("g")
        .data(bins)
        .join("g");

    // [...]

    return svg.node();
}

Что делаетreturn делать или означать, когда это не входит в определение функции?

1 Ответ

2 голосов
/ 26 апреля 2019

Да, как предположили комментаторы, это особый синтаксис для Observable.Вы видите ячейку, которая использует блок, как , упомянутое во введении к коду .

. Как вы можете думать об этом относительно другого JavaScript, это то, что он вроде IIFE , но с дополнительным учетом того, что, если он ссылается на другие ячейки, он автоматически разрешает их.Так что в ванильном JavaScript это будет выглядеть так:

chart = (() => {
    const svg = d3.select(DOM.svg(width, height));

    const g = svg.append("g")
        .selectAll("g")
        .data(bins)
        .join("g");

    // [...]

    return svg.node();
})()

На самом деле это примерно то, к чему они компилируются.Конкретный синтаксис таков, потому что должно быть ясно, что это код, который запускается при изменении ссылок - см. , как Observable запускает для подробностей об этом.В отличие от IIFE, ячейка в Observable может запускаться несколько раз, если что-то, на что она ссылается, например, генератор или Promise, изменяется.

...