默认导出后的分号
Semicolon after default export
我读到 here 我不需要在默认导出后放置分号。所以这个程序有一个不必要的分号:
export default function() {};
但是如果我的模块继续这样:
export default function() {};
(() => {
// creating a new function scope
})();
那分号就不能留了
那么这是怎么回事?语法上说我不需要分号,但如果我不加分号,代码还有别的意思吗?
更新:
如果我离开分号:
export default function() {}
(() => {
// creating a new function scope
})();
然后调用导出的函数而不是导出。 babeljs.io将后者编译成:
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = (function () {})(function () {
// creating a new function scope
})();
;
module.exports = exports["default"];
更准确地说,在它被调用后会抛出错误,因为第一个函数的 return 值也被调用(但那不是函数)。我在 chrome 中得到的错误是:
Uncaught TypeError: (intermediate value)(...) is not a function(…)
当 export default
后跟函数声明时,您不需要在 export default
后添加分号,这就是 grammar 的意思。
Babel 是错误的,我 filed a bug 反对它。该代码应解释为导出函数,然后 运行 IIFE 作为 IIFE。
我读到 here 我不需要在默认导出后放置分号。所以这个程序有一个不必要的分号:
export default function() {};
但是如果我的模块继续这样:
export default function() {};
(() => {
// creating a new function scope
})();
那分号就不能留了
那么这是怎么回事?语法上说我不需要分号,但如果我不加分号,代码还有别的意思吗?
更新:
如果我离开分号:
export default function() {}
(() => {
// creating a new function scope
})();
然后调用导出的函数而不是导出。 babeljs.io将后者编译成:
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = (function () {})(function () {
// creating a new function scope
})();
;
module.exports = exports["default"];
更准确地说,在它被调用后会抛出错误,因为第一个函数的 return 值也被调用(但那不是函数)。我在 chrome 中得到的错误是:
Uncaught TypeError: (intermediate value)(...) is not a function(…)
当 export default
后跟函数声明时,您不需要在 export default
后添加分号,这就是 grammar 的意思。
Babel 是错误的,我 filed a bug 反对它。该代码应解释为导出函数,然后 运行 IIFE 作为 IIFE。