5

首先,这不是关于 ASI 的问题。我不是在问这里是否适用自动分号插入(嗯,我有点,但开场白是为了避免在我是否应该使用分号之间发生争论,因为 asi 会处理它我...)

我知道不要在函数声明后加分号...

function foo() { 
  // do stuff
} // no semicolon

export但是在函数声明之后我需要一个分号吗?

export function foo() {
  // do stuff
} // semicolon or not to semicolon?

无论哪种情况,我也很想知道为什么。

4

2 回答 2

7

不,您不需要分号,尽管添加一个不会有任何害处。

如果我们查看ES6 规范,您会发现此签名被视为声明,并且与普通函数声明一样,它后面不需要分号:

export Declaration

需要后跟分号的语句(无论是显式的还是隐式的)在该文档中都已注明。例如:

export * 从句 ;

那里;是强制性的。在声明中,它不是。当然,插入分号不会有任何害处;JS 解释器会将其视为空语句。

于 2016-12-01T22:33:08.520 回答
3

不,这里不需要分号。请参阅MDN中的此示例:

export default function() {} // or 'export default class {}'
// there is no semi-colon here

另请参阅ECMAScript 规范

句法

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

于 2016-12-01T22:29:29.870 回答