Javascript 默认导出后的分号

Javascript 默认导出后的分号,javascript,ecmascript-6,babeljs,Javascript,Ecmascript 6,Babeljs,我读到我不需要在默认导出后加分号。所以这个程序有一个不必要的分号: export default function() {}; export default function() {} (() => { // creating a new function scope })(); 但如果我的模块继续这样: export default function() {}; (() => { // creating a new function scope })(); 那我就

我读到我不需要在默认导出后加分号。所以这个程序有一个不必要的分号:

export default function() {};
export default function() {}

(() => {
  // creating a new function scope
})();
但如果我的模块继续这样:

export default function() {};

(() => {
  // creating a new function scope
})();
那我就不能留下分号了

这是怎么回事?语法上说我不需要分号,但如果我不使用分号,代码就意味着其他东西

更新:

如果我留下分号:

export default function() {};
export default function() {}

(() => {
  // creating a new function scope
})();
然后调用导出的函数,而不是将其导出。将后者汇编为:

"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(…)

当函数声明后跟
export default
时,不需要在后面添加分号,这就是说明


巴贝尔错了,我反对。该代码应解释为导出函数,然后将IIFE作为IIFE运行。

是什么使您不能在第二种情况下保留分号?有什么东西给了你一个错误吗?@loganfsmyth请查看我的更新可能的副本(如果你的问题不是关于babel bug的话)@Bergi
我在这里读到我不需要放分号…
我忘了链接问题:(您链接的问题启发了我自己的想法。起初我怀疑规范本身不一致,后来发现可能是一个babel bug。我不完全确定这是真的。在这种情况下,它仍然是一个函数声明,而不是函数表达式,所以不应该在它后面加分号。通常对于导出语法,questi分号的使用取决于如果您将
export
部分保留在语句之外,它是否会有分号。嗯(如果您不知道,这是一个可提升的声明)@loganfsmyth这是一个需要分号来防止自动插入分号的函数声明。事实上,在ES5中没有这种情况,而且分号不是语句的一部分,也不是真正自动插入的-这确实很有趣。我不知道语法是否应该修改。我将在ES5中提出它。@logan我开始认为这是一个巴别塔错误。@BenjaminGruenbaum一些版本的WebStorm甚至提出了一个警告,如果我确实放了分号,告诉我我甚至不需要分号。我现在使用的(10.0.4)没有这个警告