17.1.2单一默认导出
可以有一个默认导出。例如,函数:
//------ myFunc.js ------ export default function () { ··· } // no semicolon! //------ main1.js ------ import myFunc from 'myFunc'; myFunc();
或者是一个班级:
//------ MyClass.js ------ export default class { ··· } // no semicolon! //------ main2.js ------ import MyClass from 'MyClass'; let inst = new MyClass();
请注意,如果您没有分号 default-export一个函数或一个类(它们是匿名的 声明)。
为什么不在导出默认声明的末尾使用分号?我以为你用半冒号结束所有陈述?
答案 0 :(得分:13)
为什么不需要分号?
因为grammar没有在那里定义分号:
export default HoistableDeclaration
export default ClassDeclaration
export default [lookahead ∉ {function, class}] AssignmentExpression ;
(除非你有表达)
我以为你用半冒号结束所有陈述?
这根本不是真的。你有没有在一个街区后加一个分号?如果有人写作
if (...) {
};
然后是错误的。
似乎所有语句都以分号结束,因为在大多数语句的结尾/最后,你最终得到一个ExpressionStatement或空语句,它们都以分号结束。
除此之外, ExportDeclaration 不是声明。
答案 1 :(得分:5)
我以为你用半冒号结束所有陈述?
是的,但声明不是声明。这不是针对导出的,也不是在正常的函数声明后输出分号。
顺便说一句,在你没有实际需要分号的陈述中,因为JavaScript有automatic semicolon insertion - 这只是一种很好的做法。
答案 2 :(得分:2)
spec指定:
大多数ECMAScript语句和声明必须以a终止 分号。这些分号可能总是在源中明确显示 文本。然而,为方便起见,可以省略这样的分号 某些情况下的源文本。描述了这些情况 通过说分号自动插入源 这些情况下的代码令牌流。
所以,IMO,如果在ES6环境中,并且(特别是)如果你正在使用服务器端JavaScript,那么在明显不会产生不良影响的情况下,可以省略分号强>
另见this article。
This是扣留分号的一个很好的例子。