命名导出函数声明后是否需要分号
Do I need a semicolon after a named export function declaration
首先,这不是关于 ASI 的问题。我不是在问自动分号插入是否适用于此(好吧,我是这样的,但开场白试图避免在我是否应该使用分号之间争论,因为 asi 会处理它我...)
我知道函数声明后不要加分号...
function foo() {
// do stuff
} // no semicolon
但是 export
函数声明后需要分号吗?
export function foo() {
// do stuff
} // semicolon or not to semicolon?
无论哪种情况,我也很想知道为什么。
不,这里不需要分号。请参阅 MDN 中的示例:
export default function() {} // or 'export default class {}'
// there is no semi-colon here
另见 the ECMAScript specification:
Syntax
ExportDeclaration :
export * FromClause ;
export ExportClause[~Local] FromClause ;
export ExportClause[+Local] ;
export VariableStatement[~Yield, ~Await]
export Declaration[~Yield, ~Await]
export defaultHoistableDeclaration[~Yield, ~Await, +Default]
export defaultClassDeclaration[~Yield, ~Await, +Default]
export default[lookahead ∉ { function, async [no LineTerminator here] function, class }]AssignmentExpression[+In, ~Yield, ~Await] ;
如您所见,Declaration
后没有分号。
不,您不需要分号,尽管添加分号也没什么坏处。
如果我们查看 the ES6 spec,您会看到此签名被视为 声明 ,并且与普通函数声明一样,它后面不需要分号:
export Declaration
需要后跟分号(无论是显式还是隐式)的语句在该文档中已注明。例如:
export *
FromClause ;
其中 ;
是强制性的。在声明中,它不是。当然,插入分号不会有任何坏处; JS 解释器会将其视为空语句。
首先,这不是关于 ASI 的问题。我不是在问自动分号插入是否适用于此(好吧,我是这样的,但开场白试图避免在我是否应该使用分号之间争论,因为 asi 会处理它我...)
我知道函数声明后不要加分号...
function foo() {
// do stuff
} // no semicolon
但是 export
函数声明后需要分号吗?
export function foo() {
// do stuff
} // semicolon or not to semicolon?
无论哪种情况,我也很想知道为什么。
不,这里不需要分号。请参阅 MDN 中的示例:
export default function() {} // or 'export default class {}' // there is no semi-colon here
另见 the ECMAScript specification:
Syntax
ExportDeclaration : export * FromClause ; export ExportClause[~Local] FromClause ; export ExportClause[+Local] ; export VariableStatement[~Yield, ~Await] export Declaration[~Yield, ~Await] export defaultHoistableDeclaration[~Yield, ~Await, +Default] export defaultClassDeclaration[~Yield, ~Await, +Default] export default[lookahead ∉ { function, async [no LineTerminator here] function, class }]AssignmentExpression[+In, ~Yield, ~Await] ;
如您所见,Declaration
后没有分号。
不,您不需要分号,尽管添加分号也没什么坏处。
如果我们查看 the ES6 spec,您会看到此签名被视为 声明 ,并且与普通函数声明一样,它后面不需要分号:
export Declaration
需要后跟分号(无论是显式还是隐式)的语句在该文档中已注明。例如:
export *
FromClause;
其中 ;
是强制性的。在声明中,它不是。当然,插入分号不会有任何坏处; JS 解释器会将其视为空语句。