Точка с запятой после экспорта по умолчанию

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

export default function() {};

но если мой модуль такой:

export default function() {};

(() => {
  // creating a new function scope
})();

тогда я не могу оставить точку с запятой.

так что здесь происходит? Грамматика говорит, что мне не нужна точка с запятой, но если я ее оставлю, код означает что-то еще?

обновление:

если я оставлю точка с запятой:

export default function() {}

(() => {
  // creating a new function scope
})();

тогда экспортируемая функция вызывается вместо экспортируемой. babeljs.Ио компилирует последнее в:

"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});

exports["default"] = (function () {})(function () {
  // creating a new function scope
})();

;
module.exports = exports["default"];

точнее после того, как он вызывается, возникает ошибка, потому что также вызывается возвращаемое значение первой функции (но это не функция). Ошибка, которую я получаю в chrome, такова:

Uncaught TypeError: (intermediate value)(...) is not a function(…)

1 ответов


вам не нужно добавлять точку с запятой после export default когда за ним следует объявление функции, то грамматика говорит.

Вавилон ошибается, я подал ошибка против него. Этот код следует интерпретировать как экспорт функции, а затем запуск IIFE как IIFE.