ES6中的默认导出.你为什么不需要分号?

Jwa*_*622 9 ecmascript-6

我正在从关于ES6探索中读到这篇文章

17.1.2单一默认导出

可以有一个默认导出.例如,一个函数:

//------ myFunc.js ------   
export default function () { ··· } // no semicolon!

//------ main1.js ------  
import myFunc from 'myFunc';
myFunc();
Run Code Online (Sandbox Code Playgroud)

或者是一个班级:

//------ MyClass.js ------  
export default class { ··· } // no semicolon!

//------ main2.js ------  
import MyClass from 'MyClass';
let inst = new MyClass();
Run Code Online (Sandbox Code Playgroud)

请注意,如果默认导出函数或类(这是匿名声明),则最后没有分号.

为什么不在导出默认声明的末尾使用分号?我以为你用半冒号结束所有陈述?

Fel*_*ing 13

你为什么不需要分号?

因为语法没有在那里定义分号:

export default HoistableDeclaration
export default ClassDeclaration
export default [lookahead ? {function, class}] AssignmentExpression ;
Run Code Online (Sandbox Code Playgroud)

(除非你有表达)

我以为你用半冒号结束所有陈述?

这根本不是真的.你有没有在一个街区后加一个分号?如果有人写

if (...) {

};
Run Code Online (Sandbox Code Playgroud)

那是错误的.

似乎所有语句都以分号结束,因为在大多数语句的结尾/底部,您最终会得到一个ExpressionStatement或空语句,它们都以分号结束.

除此之外,ExportDeclaration不是声明.


Ber*_*rgi 5

我以为你用半冒号结束所有陈述?

是的,但声明不是声明.这不是特定于导出的,您也不要在正常的函数声明后添加分号.

顺便说一句,在你不需要分号的陈述中,因为JavaScript有自动分号插入 - 这只是一个好习惯.